rename()需严格匹配原列名(大小写、空格、特殊字符),建议先用df.columns.tolist()核对;函数重命名须返回字符串,避免None;禁用inplace=True以防链式调用失败;rename后需手动更新列名引用并检查唯一性。

rename() 传字典时键必须是原列名,且大小写敏感
直接用 df.rename(columns={'old_name': 'new_name'}) 是最常见方式,但容易忽略列名是否真的一致——比如原表里是 'User ID',你写了 'user_id',字典键就匹配不上,rename 后列名毫无变化,也不会报错。建议先用 df.columns.tolist() 看一眼真实列名,注意空格、大小写、不可见字符(如全角空格)。如果列名带空格或特殊符号,字典键必须原样复制,不能“想当然”改写。
用函数重命名时,函数接收的是列名字符串,返回新列名
传函数适用于批量规则化改名,比如统一转小写、删空格、加前缀。函数签名很简单:lambda x: x.strip().lower().replace(' ', '_')。注意:函数对每个列名单独调用,不接触数据内容;返回值必须是字符串,返回 None 或非字符串会导致该列名变成 None(Pandas 会显示为 None 列,后续操作极易出错)。另外,函数内不要依赖外部变量的动态状态(如计数器),因为 Pandas 内部可能并行或多次调用该函数,行为不可控。
inplace=True 并不总是安全,链式调用时务必避免
df.rename(columns=mapping, inplace=True) 看似省事,但一旦和其它方法连用(如 df.rename(...).dropna()),就会因 inplace=True 返回 None 导致 AttributeError: 'NoneType' object has no attribute 'dropna'。除非你明确只做重命名且不再链式操作,否则一律用 df = df.rename(...) 显式赋值。这也更符合函数式习惯,便于调试和复现。
rename 后索引未更新,.columns 是视图不是副本
df.rename() 返回的是新 DataFrame,其 .columns 是独立对象。但如果你在 rename 前已用 .columns 创建了引用(如 old_cols = df.columns),rename 后 old_cols 不会自动同步——它还是原来的 Index 对象。需要重新赋值或直接用 df.columns 获取最新值。另外,若列名含重复项,rename 后仍可能保留重复,Pandas 不校验唯一性,下游 df['col'] 取值会出问题,建议 rename 后立刻检查 df.columns.is_unique。
立即学习“Python免费学习笔记(深入)”;


















