关于Pandas版本: 本文基于 pandas2.2.0 编写。
关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。
传送门: Pandas API参考目录
传送门: Pandas 版本更新及新特性
传送门: Pandas 由浅入深系列教程
Pandas.DataFrame.transpose()
DataFrame.groupby()
方法用于使用映射器或指定的列,对 DataFrame
进行数据分组,可以实现类似Excel的数据透视、分类汇总的效果。
pandas.DataFrame.transpose
方法用于交换DataFrame
的行和列,即将索引变为列标签,将列标签变为索引。这是通过在主对角线上翻转DataFrame
的方式实现的。- 属性 T 是方法
DataFrame.transpose
的访问器,可以通过 DataFrame.T 实现快速转置。
语法:
DataFrame.groupby (*args, copy=False)
返回值:
- DataFrame
- 返回转之后的
DataFrame
。
- 返回转之后的
参数说明:
*args
-
*args: tuple, optional
为了与
NumPy
兼容而接受的参数,但在实践中通常不需要传递。
copy 是否创建数据副本
-
copy: bool, default False
copy
参数用于指定是否在转置后复制数据,默认copy=False
即不会创建数据副本。- True: 创建数据副本。
- False: 创建数据副本。
⚠️ 注意 :
转置单一数据类型的
DataFrame
默认不会创建数据副本,转之后的数据修改,会作用于原始数据。例1。如果不想数据修改影响原始数据,可以设置copy=True
例1-4转换具有混合数据类型的
DataFrame
将导致具有object
数据类型的同质DataFrame
。在这种情况下,即使copy=False
也将制作数据的副本。例2⚠️ 注意 :
copy
参数将改变pandas 3.0
中的行为。默认情况下会启用Copy-on-Write
,这意味着所有带有copy
参数的方法都将使用惰性复制机制来推迟复制并忽略copy
参数。copy
参数将在pandas
的未来版本中删除。您已经可以通过启用写入时复制pd.options.mode.copy_on_write = True
来获得未来的行为和改进。
相关方法:
➡️ 相关方法
快速转置
示例:
测试文件下载:
本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。
若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。
例1:具有单一数据类型的 DataFrame
不会自动创建数据副本, 转之后的数据修改,会作用于原始数据
- 例1-1、 构建演示数据,并观察数据类型
import pandas as pd
# 构建演示数据
d1 = {"col1": [1, 2], "col2": [3, 4]}
df = pd.DataFrame(data=d1)
# 观察数据类型
df.dtypes
col1 int64
col2 int64
dtype: object
观察上面结果,可以发现,col1和col2两列的数据类型相同
- 例1-2、 进行转置
# 转置
df1 = df.transpose()
df1
0 | 1 | |
---|---|---|
col1 | 1 | 2 |
col2 | 3 | 4 |
- 例1-3、 对转之后的数据修改数据,然后观察原始数据
# 修改df1的值
df1.iloc[0, 0] = 100
# 观察原始数据df
df
col1 | col2 | |
---|---|---|
0 | 100 | 3 |
1 | 2 | 4 |
由上面结果可以发现,数据类型相同,转之后并没有创建数据副本,对转置数据的修改,会反应在原始数据中。
- 例1-4、 设置
copy=True
, 对转之后的数据修改数据,则不会修改原始数据。
import pandas as pd
# 构建演示数据
d1 = {"col1": [1, 2], "col2": [3, 4]}
df = pd.DataFrame(data=d1)
# 转置
df2 = df.transpose(copy=True)
# 修改转之后的数据
df2.iloc[0, 0] = 100
# 观察原始数据
df
col1 | col2 | |
---|---|---|
0 | 1 | 3 |
1 | 2 | 4 |
由上面结果可以发现,具有统一数据类型的 DataFrame
设置 copy=True
转置后,转置数据的修改,不会反映在原始数据。
例2:转置混合数据类型的 DataFrame
将始终创建数据副本,即便 copy=False
import pandas as pd
# 构建演示数据
d2 = {'name': ['Alice', 'Bob'],
'score': [9.5, 8],
'employed': [False, True],
'kids': [0, 0]}
df = pd.DataFrame(data=d2)
# 设置copy=False 转置
df3 = df.transpose(copy=False)
# 修改df3的数据
df3.iloc[0,0] = 1000
# 观察原始数据
df
name | score | employed | kids | |
---|---|---|---|---|
0 | Alice | 9.5 | False | 0 |
1 | Bob | 8.0 | True | 0 |
由上面结果可以发现,即便转置时设置 copy=False
,转置后的数据修改,也没有作用于原始数据,这说明转置混合数据类型的 DataFrame
将始终创建数据副本