pandas replace报错:传入3个参数却提示收到4个的原因排查
错误原因及解决方法
核心问题
你错误地将regex=True以位置参数的形式传递给了Series.replace()方法,但regex并不是该方法的第三个位置参数,这导致参数数量超出了方法的预期。
为什么会报错?
Series.replace()的位置参数仅包含前两个:to_replace(要替换的值)和value(替换后的值)。regex从始至终都是需要通过关键字参数指定的参数。当你写df["amount_recived"].replace("\\N", "0", True)时,第三个True会被错误地解析为额外的位置参数,加上隐式的Series对象本身,总共传入了4个参数,超出了方法允许的位置参数数量范围,因此触发报错。
正确写法
写法1:指定regex关键字参数(不修改原DataFrame)
df["amount_recived"].replace("\\N", "0", regex=True)
写法2:如果需要直接修改原DataFrame(加上inplace关键字)
df["amount_recived"].replace("\\N", "0", regex=True, inplace=True)
补充说明
- 注意列名拼写:
amount_recived应为amount_received(属于笔误,但不影响当前替换逻辑) - 如果
\N是代表空值的特殊标记,也可以先将其转为NaN再填充0,效果一致:
import numpy as np df["amount_recived"] = df["amount_recived"].replace("\\N", np.nan).fillna(0)
内容的提问来源于stack exchange,提问作者Md Mahadi Hasan Sany
相关产品推荐
相关产品推荐

