我为df
设置了三个掩码,我想过滤掉这些值。
例如,一些随机蒙版:
mask1 = df['column1'].isnull()
mask2 = df['column2'] > 5
mask3 = df['column3'].str.contains('hello')
现在如何结合使用这些掩码以滤除这些值?
这是正确的方法吗?同时使用~
和|
吗?
masked_df = df[~mask1 | ~mask2 | ~mask3]
我的数据框中有太多行,以至于我不能100%确定手动检查是否正确。
答案 0 :(得分:4)
您的解决方案很好,但也可以按位AND
使用并反转链接条件:
masked_df = df[~(mask1 & mask2 & mask3)]
如果列表中包含掩码,则以上解决方案将用np.logical_and.reduce
重写:
masks = [mask1, mask2, mask3]
m = df[~np.logical_and.reduce(masks)]
print (m)
A column1 column2 column3
2 c 4.0 9 hello
3 d 5.0 4 hello
4 e 5.0 2 hello
5 f 4.0 3 hello