自定义DataFrame空值清理函数运行后原数据仍有空值是什么原因
问题核心原因
pandas的dropna()方法默认不会修改原DataFrame,仅会返回一个删除了空值的新DataFrame对象,你代码中未指定inplace=True参数,也未将处理后的新对象绑定回原变量。- 循环中遍历得到的
df是函数内的局部临时变量,对df重新赋值仅会修改该局部变量的指向,不会改变外部传入的df1、df2的指向,也不会修改原对象的内容。 - 函数最终返回的是未做任何修改的原
argv元组,即使你调用时接收返回值,拿到的也是未处理的原对象,且你调用时没有接收返回值重新赋值给外部变量,外部的df1、df2自然还是携带空值的原始对象。
正确实现方案
方案1:直接修改原对象(适合不需要保留原始数据的场景)
def cleanup_data(*argv): for df in argv: df.dropna(inplace=True) # 调用后df1、df2会直接被修改 cleanup_data(df1, df2)
方案2:返回处理后的新对象(适合需要保留原始数据的场景)
def cleanup_data(*argv): return [df.dropna() for df in argv] # 调用时接收返回值赋值给原变量即可 df1, df2 = cleanup_data(df1, df2)
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

