如何查找pandas中非NaN格式的缺失值?是否需咨询数据提供者或用循环?
处理非标准缺失值的实用方案
定位含未知符号缺失值的行
不用写循环,用pandas的矢量化操作就能高效解决:
- 先快速排查疑似缺失符号:对目标列执行
df[目标列名].unique(),查看所有唯一值,一眼就能找出####、**这类和正常数据格格不入的符号;如果列太多,用df.nunique()看每列的不同值数量,值少且包含特殊符号的列重点排查 - 批量匹配筛选行:把排查到的疑似缺失符号放进列表,比如
missing_symbols = ['####', '**', 'NA', '—'],然后用df[df.isin(missing_symbols).any(axis=1)]就能直接筛选出包含这些符号的所有行 - 正则模糊匹配:如果符号是重复特殊字符(比如全#、全*),可以用正则匹配模式,比如
df[df['目标列名'].str.match(r'^[#*]+$', na=False)],匹配该列符合“全是#或*”的行,再结合any(axis=1)就能找出整行存在这类缺失值的记录
优先咨询数据收集人员
这是最靠谱的第一步:
- 数据采集方清楚缺失值的编码规则,能直接告诉你所有非标准缺失符号,省得你逐个猜
- 还能了解这些缺失值的业务背景(比如是未采集、采集失败还是无效数据),这决定了你后续是填充、删除还是做其他处理
别用循环处理
循环在pandas里效率极低,尤其是数据量上万的时候,矢量化操作(比如上面的isin()、str.match())比循环快几十倍甚至上百倍,完全能覆盖你的需求,没必要写循环。
内容的提问来源于stack exchange,提问作者rereer
相关产品推荐
相关产品推荐

