如何为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
相关产品推荐
相关产品推荐

