如何在DataFrame中将所有列中的?和n.a值替换为NaN?使用df.fillna(0, inplace=True)无法替换'?'的解决方法
解决DataFrame中替换
?和n.a为NaN的问题 嘿,我懂你遇到的困扰了——df.fillna(0, inplace=True)确实搞不定?和n.a这类字符串形式的异常值,因为这个方法只针对已经被标记为NaN的缺失值生效,而你提到的这两个是实打实的字符串,不在它的处理范围内。
下面给你两种最实用的正确实现方案:
方案一:用replace()批量替换异常值
这是最直接的处理方式,我们可以把需要替换的异常值列出来,统一转换为np.nan:
首先确保你导入了numpy(pandas的NaN本质依赖numpy的实现):
import numpy as np import pandas as pd
然后执行替换操作:
# 将?和n.a一次性替换为NaN,inplace=True会直接修改原DataFrame df.replace(['?', 'n.a'], np.nan, inplace=True)
如果你的数据里还有其他类似的异常值变体(比如大小写不同的N.A、带空格的?),还可以用正则表达式来匹配:
# 匹配所有带空格或大小写的n.a变体 df.replace(r'^\s*n\.a\s*$', np.nan, regex=True, inplace=True) # 匹配所有带空格的? df.replace(r'^\s*\?\s*$', np.nan, regex=True, inplace=True)
方案二:读取数据时直接识别缺失值
如果你的DataFrame是从文件(比如CSV)读取来的,完全可以在读取阶段就把这些异常值标记为NaN,一步到位:
# 读取CSV时,指定哪些字符串要被识别为NaN df = pd.read_csv('your_data_file.csv', na_values=['?', 'n.a'])
这样读出来的DataFrame里,?和n.a会直接被处理成NaN,后续再用fillna()做填充就完全没问题啦。
内容的提问来源于stack exchange,提问作者meet delvadiya
相关产品推荐
相关产品推荐

