Pandas如何重新调整一个pandas dataframe
阅读更多:Pandas 教程
1. 简介
Pandas是一个强大的数据处理和分析工具,它提供了丰富的函数和方法来处理和转换数据。其中一个常用功能是重新调整数据框架(DataFrame)的形状。重新调整数据框架可以提取有用的信息、转换数据以满足需求、整理数据以进行分析等。
2. 横向调整数据框架
在某些情况下,我们可能需要将数据框架的行转换为列。例如,假设我们有一个包含学生姓名、科目和成绩的数据框架,我们想将每个学生的科目和成绩作为列。下面是一个示例数据框架:
姓名 | 科目 | 成绩 |
---|---|---|
张三 | Math | 80 |
张三 | English | 90 |
李四 | Math | 75 |
李四 | English | 85 |
我们可以使用pivot
函数来实现横向调整数据框架的目标。以下是一个示例代码:
import pandas as pd
data = {'姓名': ['张三', '张三', '李四', '李四'],
'科目': ['Math', 'English', 'Math', 'English'],
'成绩': [80, 90, 75, 85]}
df = pd.DataFrame(data)
df_pivot = df.pivot(index='姓名', columns='科目', values='成绩')
print(df_pivot)
运行以上代码,我们将得到以下输出:
科目 | English | Math
姓名
张三 | 90 | 80
李四 | 85 | 75
如上所示,原始数据框架中的姓名列被用作行索引,科目列被用作列索引,并且成绩列的值被填充到对应的位置。这种横向调整的方式方便我们从数据框架中提取某个学生的成绩信息。
3. 纵向调整数据框架
在另一些情况下,我们可能需要将数据框架的列转换为行。例如,假设我们有一个包含不同年份及其对应GDP值的数据框架,我们想将每个年份作为行,并将GDP值作为列。下面是一个示例数据框架:
年份 | GDP |
---|---|
2019 | 1000 |
2020 | 1100 |
2021 | 1200 |
我们可以使用melt
函数来实现纵向调整数据框架的目标。以下是一个示例代码:
import pandas as pd
data = {'年份': [2019, 2020, 2021],
'GDP': [1000, 1100, 1200]}
df = pd.DataFrame(data)
df_melt = df.melt(id_vars='年份', var_name='指标', value_name='数值')
print(df_melt)
运行以上代码,我们将得到以下输出:
年份 | 指标 | 数值
2019 | GDP | 1000
2020 | GDP | 1100
2021 | GDP | 1200
如上所示,原始数据框架中的年份列被用作行索引,GDP列的名称被用作列索引,并且GDP值被填充到对应的位置。这种纵向调整的方式方便我们从数据框架中提取某个年份的GDP值。
4. 更多的数据框架调整函数
除了pivot
和melt
函数外,Pandas还提供了其他一些数据框架调整的函数,以满足不同的需求。以下是一些常用的函数:
stack和unstack函数
stack
函数将数据框架的列转换为索引,而unstack
函数将索引转换回列。这对于多级索引的数据框架特别有用。例如,假设我们有以下的多级索引数据框架:
A B
index1 index2
1 a 10 20
b 30 40
2 a 50 60
b 70 80
我们可以使用stack
函数将列转换成索引,如下所示:
df_stack = df.stack()
print(df_stack)
运行以上代码,我们将得到以下输出:
index1 index2
1 a 10
b 30
2 a 50
b 70
dtype: int64
如上所示,原始数据框架中的列被转换成了两个级别的索引。
如果我们想要将索引转换回列,可以使用unstack
函数,如下所示:
df_unstack = df_stack.unstack()
print(df_unstack)
运行以上代码,我们将得到以下输出:
A B
index1 index2
1 a 10 20
b 30 40
2 a 50 60
b 70 80
如上所示,原始数据框架中的索引被转换回了它们原来的形式。
transpose函数
transpose
函数用于在数据框架中交换行和列。它可以实现行列互换的效果。例如,假设我们有以下的数据框架:
姓名 | 科目1 | 科目2 | 科目3 |
---|---|---|---|
张三 | 80 | 90 | 85 |
李四 | 70 | 65 | 75 |
我们可以使用transpose
函数进行行列互换,如下所示:
df_transpose = df.transpose()
print(df_transpose)
运行以上代码,我们将得到以下输出:
张三 李四
科目1 80 70
科目2 90 65
科目3 85 75
如上所示,原始数据框架中的行和列被交换了。
总结
在本文中,我们介绍了如何使用Pandas来重新调整一个数据框架。我们讨论了横向调整和纵向调整数据框架的方法,并介绍了一些常用的函数,如pivot
、melt
、stack
、unstack
和transpose
。这些函数在数据处理和分析中非常有用,可以帮助我们快速转换数据以满足不同的需求。
以上是关于Pandas重新调整数据框架的介绍,希望本文对您有所帮助!