通过包含空值的列表过滤熊猫数据框
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()。 工作得很好,我明白一切,谢谢以上是关于通过包含空值的列表过滤熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章