如何基于status列的条件填充reason列的NaN空值
报错原因
- 你新建的
data2使用了SO_STATUS作为列名,和原data中的已有列重名,join操作无法处理重名列且未指定后缀的情况,因此抛出重叠错误。
原代码逻辑问题
- 空值判断错误:使用
== 'NaN'只能匹配字符串格式的"NaN",无法识别pandas/numpy的原生空值,需使用pd.isna()函数做判断。 - 规则覆盖不全:仅实现了Invoiced状态的填充逻辑,未覆盖Lost Sale状态的对应规则。
- 未保留原有数据:原有REASON列的非空值没有做保留处理。
正确实现方案
方案1:使用loc定位赋值(可读性更高)
直接在原列上修改,不需要新建DataFrame做join,自动保留原有非空的REASON值:
# 填充Invoiced状态的空REASON data.loc[(data["SO_STATUS"] == "Invoiced") & pd.isna(data["SO_LOSREASON"]), "SO_LOSREASON"] = "Not Applicable" # 填充Lost Sale状态的空REASON data.loc[(data["SO_STATUS"] == "Lost Sale") & pd.isna(data["SO_LOSREASON"]), "SO_LOSREASON"] = "Unknown"
方案2:使用np.where多条件判断
data["SO_LOSREASON"] = np.where( (data["SO_STATUS"] == "Invoiced") & pd.isna(data["SO_LOSREASON"]), "Not Applicable", np.where( (data["SO_STATUS"] == "Lost Sale") & pd.isna(data["SO_LOSREASON"]), "Unknown", data["SO_LOSREASON"] # 不满足填充条件的保留原有值 ) )
内容的提问来源于stack exchange,提问作者nizana
相关产品推荐
相关产品推荐

