如何使用字符串函数重命名Pandas中的单个列标签?
Pandas中使用字符串函数重命名单个列标签的正确映射方式
你遇到的问题是因为字典映射模式下,df.rename()会直接把字典的值作为新列名,而不是像批量传入函数那样自动调用它处理原列名。当你写{'Col 2': str.upper}时,实际是把str.upper这个方法对象赋值给了列名,所以才会出现<method 'upper' of 'str' objects>这种奇怪的结果。
下面是几种正确的实现方式:
方法1:直接传入处理后的字符串
如果列名是固定的,直接手动调用字符串函数得到结果:
renamed = df.rename(columns={'Col 2': 'Col 2'.upper()})
方法2:使用lambda函数动态处理
这种方式更灵活,适合列名不确定或者需要复用逻辑的场景:
renamed = df.rename(columns={'Col 2': lambda x: x.upper()})
lambda函数会接收原列名作为参数x,然后调用upper()返回处理后的字符串作为新列名。
方法3:批量处理指定列(扩展场景)
如果要对多个指定列应用字符串函数,可以用字典推导式生成映射:
target_cols = ['Col 2', 'Col 3'] renamed = df.rename(columns={col: col.upper() for col in target_cols})
修改后的完整示例代码
import pandas as pd import numpy as np n = 4 df = pd.DataFrame(np.random.randint(0, 100, size=(5, n)), columns=[f'Col {i}' for i in range(n)]) # 使用lambda的方式重命名 renamed = df.rename(columns={'Col 2': lambda x: x.upper()}) print("原DataFrame:") print(df) print("\n重命名后的DataFrame:") print(renamed)
运行后,Col 2会被正确改为COL 2,其他列保持不变。
内容的提问来源于stack exchange,提问作者mins
相关产品推荐
相关产品推荐

