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

Pandas中apply调用自定义函数缺失第二个参数的问题排查

问题分析与解决方法

错误原因

你定义的replace_new函数需要接收city和pos两个参数,但使用df[["City","pos"]].apply(replace_new, axis=1)时,apply会把每一行打包成一个Series对象传给函数,而不是拆分出两个独立参数。函数只收到一个参数,自然会报“缺少pos参数”的错误。

解决方法

方法1:适配行对象修改函数

调整函数逻辑,让它接收整行数据,再从中提取需要的字段:

def replace_new(row):
    city = row["City"]
    pos = row["pos"]
    if pos == 0:
        return city.replace("[Nn]ew", "New_", regex=True)
    else:
        return city

# 替换City列,保留其他原有列
df["City"] = df.apply(replace_new, axis=1)
# 清理临时的pos列
df.drop("pos", axis=1, inplace=True)

方法2:用lambda拆分参数传递

如果不想修改原函数,可以用lambda把行里的字段拆出来传给函数:

def replace_new(city, pos):
    if pos == 0:
        return city.replace("[Nn]ew", "New_", regex=True)
    else:
        return city

df["City"] = df.apply(lambda row: replace_new(row["City"], row["pos"]), axis=1)
df.drop("pos", axis=1, inplace=True)

方法3:更简洁的正则直接替换(推荐)

其实完全不需要创建pos列,直接用正则锚定字符串开头,匹配New或new并替换,一行代码就能完成需求:

df["City"] = df["City"].str.replace(r"^[Nn]ew", "New_", regex=True)

这里的^表示匹配字符串开头,[Nn]匹配大小写的N,精准替换开头的目标字符,效率更高、代码更简洁。

最终效果

执行后原DataFrame的City列会变成:['York New', 'Parague', 'New_Delhi', 'Venice', 'New_Orleans'],完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:05:21