Pandas中如何转置数据并设置列名?解决列名不符预期问题
解决Pandas转置后设置列名的问题
我来帮你搞定这个转置后列名的问题!首先咱们得理清转置操作中索引和列名的对应关系——Pandas默认转置时会把原数据的列名变成新的索引,原数据的索引变成新的列名,这就是你当前输出不符合预期的原因。
假设你的原始数据大概是这样的(常见场景):
import pandas as pd # 示例原始数据 df = pd.DataFrame({ "指标": ["销售额", "利润"], "2022": [100, 20], "2023": [150, 30] })
如果直接用df.T转置,会得到列名为0、1,索引包含“指标”的结果,这显然不是你想要的。下面给你两种靠谱的解决方法:
方法一:先设置标识列为索引再转置(推荐)
这种方法一步到位,提前把用来做新列名的列设为索引,转置后直接得到预期结构:
# 将"指标"列设置为数据的索引 df.set_index("指标", inplace=True) # 执行转置 transposed_df = df.T # 此时列名已经是"销售额"和"利润",索引是年份 print(transposed_df)
输出结果就是你想要的:
指标 销售额 利润 2022 100 20 2023 150 30
方法二:转置后调整列名和索引
如果已经完成转置操作,也可以事后调整:
# 先执行转置 transposed_df = df.T # 把转置后的第一行(原"指标"列的值)设为新列名 transposed_df.columns = transposed_df.iloc[0] # 删除不需要的"指标"行 transposed_df = transposed_df.drop("指标") # 可选:给索引命名(比如"年份") transposed_df.index.name = "年份"
这样处理后也能得到符合预期的结果。核心思路就是让你想要的列名来源(比如原始数据中的“指标”列)成为转置后列名的依据,而不是默认的数字索引。
内容的提问来源于stack exchange,提问作者Hannan
相关产品推荐
相关产品推荐

