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

Pandas调用自定义函数新增列触发DataFrame属性错误该如何解决?

问题根因
  • apply参数错误:df.apply(fun1(),axis=1)中写的是fun1(),属于直接执行函数拿到返回值,而非传入函数对象给apply遍历调用。当前示例数据中无xyz值,fun1()执行后返回字符串data not available,apply会将传入的字符串当做方法名,尝试对每行数据调用对应方法,找不到对应方法就抛出属性错误。
  • 函数无入参:按行调用apply时,每次遍历会将当前行的Series对象作为参数传入处理函数,fun1没有定义入参,即便传入函数对象也会触发参数不匹配报错。
  • 逻辑范围错误:原函数内的判断逻辑是扫描整个DataFrame的col1列,而非判断当前行的col1值,不符合按行生成新列的需求。
  • 返回值类型不匹配:原函数命中判断时返回的是单列DataFrame对象,无法直接赋值给新列的单个单元格。
修复方案

按行匹配的实现(每行判断col1是否为xyz,对应返回col2或提示文本)

def fun1(row):
    if row['col1'] == 'xyz':
        return row['col2']
    else:
        return "data not available"

# apply传入函数对象不要加括号
df['new_column'] = df.apply(fun1, axis=1)

全局判断的实现(全表存在xyz则所有行填充对应col2值,否则所有行填充提示文本)

如果你的需求是全局判断而非按行判断,不需要用apply,直接用下方代码性能更高:

if df['col1'].isin(['xyz']).any():
    target_val = df.loc[df['col1'] == 'xyz', 'col2'].iloc[0]
    df['new_column'] = target_val
else:
    df['new_column'] = "data not available"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 21:24:04