You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Pandas DataFrame部分列名加前缀/后缀?赋值失效原因?

问题原因与解决方案

为什么原代码无法修改列名?

当你执行df[['col2']] = df[['col2']].add_prefix('hi_')时,pandas的赋值逻辑是按列名匹配填充数据,而非替换列名:

  • 右侧的df[['col2']].add_prefix('hi_')会生成一个新的DataFrame,列名为hi_col2
  • 左侧的df[['col2']]指定了要将数据写入原DataFrame的col2列
  • pandas会忽略右侧的列名,仅将hi_col2列的数据提取出来,写入左侧的col2列,因此原列名不会改变

而你提到的乘法例子df[['col2']] = df[['col2']] * 2能生效,是因为左右两侧的列名都是col2,本质是更新该列的数据,而非修改列名,二者逻辑完全不同。

正确修改列名的方法

方法1:使用rename方法(推荐)

这是最安全、可读性最高的方式,支持单列或多列修改:

import pandas as pd

df = pd.DataFrame({'col1': [1, 2, 3], 'col2': [4, 5, 6]})
# 修改单列,返回新DataFrame(不修改原数据)
df_new = df.rename(columns={'col2': 'hi_col2'})
# 或者直接修改原DataFrame(谨慎使用inplace)
df.rename(columns={'col2': 'hi_col2'}, inplace=True)

print(df)

输出:

col1  hi_col2
0     1        4
1     2        5
2     3        6

方法2:提取列加前缀后合并

如果需要给多列批量加前缀,可以先处理目标列,再和原数据合并:

import pandas as pd

df = pd.DataFrame({'col1': [1, 2, 3], 'col2': [4, 5, 6]})
# 提取目标列并加前缀
modified_cols = df[['col2']].add_prefix('hi_')
# 合并原数据中未修改的列和处理后的列
df = pd.concat([df.drop('col2', axis=1), modified_cols], axis=1)

print(df)

方法3:直接修改列名列表

适合列数量少且确定的场景:

import pandas as pd

df = pd.DataFrame({'col1': [1, 2, 3], 'col2': [4, 5, 6]})
# 直接替换列名列表
df.columns = ['col1', 'hi_col2']

print(df)

内容的提问来源于stack exchange,提问作者RogerKint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:25:16