如何将DataFrame多列中的字符串'nan'批量替换为原生NaN的高效方法
写法失效的原因
你尝试的多列inplace替换不生效,是因为df[['x', 'y', 'z']]取多列的操作返回的是原DataFrame的临时副本,inplace=True只会修改这个临时副本,不会改动原DataFrame,自然看不到效果。
高效实现方案
不需要额外写自定义函数,pandas原生方法就可以直接实现多列批量替换,推荐两种稳定写法:
- 直接赋值替换(最稳妥,避免inplace的隐式问题)
df[['x', 'y', 'z']] = df[['x', 'y', 'z']].replace('nan', np.NaN)
- 用replace的subset参数指定操作列(性能更优)
df.replace('nan', np.NaN, inplace=True, subset=['x', 'y', 'z'])
额外优化建议
替换完成后你可以直接把这几列转成数值类型,解决之前的object类型问题:
# 方法1:直接转float,适合已经确认列中只有可转数值的内容 df[['x', 'y', 'z']] = df[['x', 'y', 'z']].astype(float) # 方法2:用to_numeric更安全,遇到非数值内容会自动转NaN,适合还有未清理的异常字符的场景 df[['x', 'y', 'z']] = df[['x', 'y', 'z']].apply(pd.to_numeric)
内容的提问来源于stack exchange,提问作者jchilton
相关产品推荐
相关产品推荐

