如何在pandas中通过含空值的列表筛选DataFrame符合条件的记录
问题解答
首先回答你的核心疑问:不能直接把空值加入判断列表通过isin()实现统一筛选,但也不需要单独筛选后合并,只要调整判断逻辑就可以实现一步筛选。
问题根因
pandas 内置的isin()方法默认无法匹配NaN空值,核心原因是NaN的比较特性:在pandas/numpy的规则中,NaN == NaN永远返回False,所以哪怕你手动把numpy.nan加入判断列表,isin()也识别不到对应的空值记录。
优化后的实现方案
直接在布尔判断逻辑里补充空值识别条件即可,修改后的函数如下:
import pandas as pd import numpy as np def GetEmpty(df, on, items_list=['']): column = df[on] # 同时匹配自定义枚举值和空值 boolean_series = column.isin(items_list) | column.isna() empty_df = df[boolean_series] return empty_df # 调用测试 empty_df = GetEmpty(df, 'Isin', ['','N/A', 'NODATA'])
用你提供的示例DataFrame测试,会正确返回Isin为NaN、NODATA的两条记录,符合筛选要求。
如果需要适配更多场景(比如部分场景不需要包含空值),可以增加开关参数灵活控制:
def GetEmpty(df, on, items_list=[''], include_na=True): column = df[on] boolean_series = column.isin(items_list) if include_na: boolean_series = boolean_series | column.isna() return df[boolean_series]
内容的提问来源于stack exchange,提问作者Zdunkov
相关产品推荐
相关产品推荐

