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

通过自定义函数(UDF)重命名Pandas DataFrame列失败求助

问题原因与解决方案

你代码的问题出在**df.apply(modname)的使用方式错误**:

  • Pandas的apply方法默认是对DataFrame的每一列(axis=0)或每一行(axis=1)单独执行函数,而不是把整个DataFrame传给modname。
  • 你的modname函数是为处理整个DataFrame设计的,但实际每次被调用时传入的是单个Series(比如'Age'列),Series没有columns参数,rename操作根本不会生效,最终返回的还是原列数据,所以整个DataFrame的列名没变化。

正确写法1:直接调用函数(推荐)

既然modname是处理整个DataFrame的,直接把df传入函数即可,不需要用apply:

import pandas as pd

data = {'Age': [21, 19, 20, 18,80,90],'Stream': [88, 65,99, 765,65,55],'Percentage': [88, 92, 95, 70,55,47]}
df = pd.DataFrame(data, columns=['Age', 'Stream', 'Percentage'])

print("Given Dataframe :\n", df)

def modname(frame):
    frame = frame.rename(columns={'Age':'aa','Stream':'bb','Percentage':'cc'})
    return frame

# 直接传入整个DataFrame
df = modname(df)

print(df)

正确写法2:用apply但指定axis=None(不推荐,没必要)

如果一定要用apply,需要指定axis=None,这样Pandas会把整个DataFrame作为参数传给函数:

df = df.apply(modname, axis=None)

运行后就能看到列名成功改为aa、bb、cc了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:42:41