Pandas.DataFrame.transpose() 转置 详解 含代码 含测试数据集 随Pandas版本持续更新

本文详细介绍了Pandas库中DataFrame对象的transpose()方法以及groupby()函数的用法,重点讨论了转置操作中数据副本的创建策略,包括单一数据类型与混合数据类型的处理。同时提到了Pandas版本更新中的Copy-on-Write行为变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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 来获得未来的行为和改进。

相关方法:

➡️ 相关方法


示例:

测试文件下载:

本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。

若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。

测试文件下载位置.png


例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
01
col112
col234
  • 例1-3、 对转之后的数据修改数据,然后观察原始数据
# 修改df1的值
df1.iloc[0, 0] = 100
# 观察原始数据df
df
col1col2
01003
124

由上面结果可以发现,数据类型相同,转之后并没有创建数据副本,对转置数据的修改,会反应在原始数据中。

  • 例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
col1col2
013
124

由上面结果可以发现,具有统一数据类型的 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
namescoreemployedkids
0Alice9.5False0
1Bob8.0True0

由上面结果可以发现,即便转置时设置 copy=False ,转置后的数据修改,也没有作用于原始数据,这说明转置混合数据类型的 DataFrame 将始终创建数据副本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数象限

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值