通过包含空值的列表过滤熊猫数据框

Posted

技术标签:

【中文标题】通过包含空值的列表过滤熊猫数据框【英文标题】:filter pandas dataframe by a list that includes an empty values 【发布时间】:2022-01-04 16:07:04 【问题描述】:

我有一个数据框,我需要创建另一个数据框,其中仅包含特定列中缺少的记录。

“缺失”表示它可以为空、“N/A”、“NODATA”或在某些情况下为其他固定值(我需要一个函数,这样我就可以简单地传递一个适合这种情况的列表)。

我可以按值过滤它,所以找到了 N/As 和 NODATA 记录,但它看不到空的记录。

我尝试了多种方法,是否可以这样做(所以空值是列表的一部分),还是我需要单独过滤空并将其合并到列表中?

def GetEmpty(df, on, items_list=['']):
    column = df[on]
    boolean_series = column.isin(items_list)
    empty_df = df[boolean_series]
    return empty_df

empty_df = GetEmpty(df, 'Isin', ['','N/A', 'NODATA'])

编辑:数据框:

 System Book    Isin ID
0    ABC  DEF     XYZ  A
1    ABC  DEF     NaN  B
2    ABC  DEF     ABC  C
3    ABC  DEF  NODATA  D

【问题讨论】:

你能展示你的数据框样本吗? 【参考方案1】:

如果我理解正确,您正在检查它是否为空(即:Python 的 None 或 Numpy.NaN)并检查它是否是这些特殊值之一 - 空字符串 ("")、"N/A" ,或“NODATA”。

Pandas 有一个名为 isnull() 的内置函数,用于检查 None 或 np.NaN。

所以,你可以做这样的事情......

import pandas as pd

def GetEmpty(df, on, items_list=['']):
        boolean_series = df.apply(lambda x: True if ((pd.isnull(x[on])) or (x[on] in items_list)) else False, axis=1)
        empty_df = df[boolean_series]
        return empty_df

【讨论】:

它工作正常,谢谢。所以现在有办法将 None 或 NaN 作为列表的一部分并检查这个列表吗? 不幸的是,如果你在 [np.nan, "NODATA]" 中写入 "x[on],如果 x[on] 是 "np.nan",它就不会返回 true。只是不是类似的。如果需要更大的灵活性,您可以将标志添加到您的方法中,例如 check_nan=True 并单独测试它们。检查 np.nan 最受支持的方法是使用 numpy.isnan() 或 pandas.isnull()。 工作得很好,我明白一切,谢谢

以上是关于通过包含空值的列表过滤熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤或删除包含熊猫列表中值的行

重塑具有列表作为值的熊猫数据框

如何将包含数组中的值的熊猫列扩展到多列?

如何在熊猫数据框中使用列表作为值?

如何在熊猫数据框中使用列表作为值?

如果行包含列中列表中的两个值,如何过滤数据框