Python Pandas:获取DataFrame中某列不为空的行

19

我正在筛选我的DataFrame,删除那些特定列的单元格值为None的行。

df = df[df['my_col'].isnull() == False]

工作正常,但PyCharm告诉我:

PEP8:应将与False的比较改为'if cond is False:'或'if not cond:'

但我想知道如何将其应用于我的用例?使用'not ...'或'is False'都不起作用。 我当前的解决方案是:

df = df[df['my_col'].notnull()]

7
df = df[df ['my_col']不为空()] - MaxU - stand with Ukraine
1
我仍然不明白这与PEP8消息有什么关系。 - Matthias
1
@MohammadAthar 那个不起作用。正如我在问题中提到的那样。 - Matthias
1
@Matthias,我同意PEP8 - 它看起来不像Pythonic或Pandaic(Pandas具有布尔索引和否定运算符)... - MaxU - stand with Ukraine
4
df = df.dropna(subset=['my_col']) - jezrael
显示剩余5条评论
1个回答

32

Python有短路逻辑运算符notandor。这些在Python中有非常具体的含义,不能被覆盖(not必须返回bool类型,a and/or b总是返回ab,否则会抛出错误)。

然而,Python也有可重载的布尔运算符~(not)、&(and)、|(or)和^(xor)。

你可能会认识到这些是int位运算符,但Numpy(因此也包括pandas)使用它们来进行数组/系列布尔运算。

例如:

b = np.array([True, False, True]) & np.array([True, False, False])
# b --> [True False False]
b = ~b 
# b --> [False True True]
所以你想要的是:
df = df[~df['my_col'].isnull()]

我赞同PEP8,不要使用== False


感谢您的解释和又一个例子。 - Matthias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接