如何使用apply方法将多输入参数函数正确应用到DataFrame中?
报错原因
你的代码存在两处用法错误,直接触发语法/参数异常:
pandas.Series.apply()的第一个入参需要是可逐元素执行的函数对象,你写的right(df["Campaign"], 4)是直接把整列传入函数执行,返回的是截取后的整列结果,不是apply能逐行调用的函数apply()方法不存在index参数,传入该参数会直接触发参数不匹配报错;另外你没有将apply的执行结果赋值回原列,就算代码不报错,原DataFrame的内容也不会更新。
可行实现方案
方案1:修正自定义函数的调用逻辑
用lambda做逐元素传参的包装,把每个单元格的字符串值传入你自定义的right函数即可:
def right(s, amount): return s[-amount:] # 处理结果赋值回原列完成更新 df["Campaign"] = df["Campaign"].apply(lambda cell_val: right(cell_val, 4)) print(df)
方案2:用pandas原生字符串方法(性能更优)
不需要自定义函数,直接调用pandas内置的字符串向量化操作,运行效率比apply循环高很多:
# 直接对字符串序列做末尾4位切片,提取年份 df["Campaign"] = df["Campaign"].str[-4:] print(df)
注意:以上方案默认你的Campaign列所有单元格都符合
Jan 1- Dec 31, 2021这类格式,年份固定在字符串最后4位。如果存在格式不统一的单元格,建议先做数据格式校验,避免截取错误。
内容的提问来源于stack exchange,提问作者Nicolas Disabato
相关产品推荐
相关产品推荐

