通过自定义函数(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
相关产品推荐
相关产品推荐

