Python Pandas:获取列不为空的DataFrame的行
Posted
技术标签:
【中文标题】Python Pandas:获取列不为空的DataFrame的行【英文标题】:Python Pandas: get rows of a DataFrame where a column is not null 【发布时间】:2018-09-15 08:01:07 【问题描述】:我正在过滤我的 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()]
【问题讨论】:
df = df[df['my_col'].notnull()]
?
~
是非运算符
我还是想知道这与 PEP8 消息有什么关系。
@MohammadAthar 不起作用。正如我的问题中提到的那样。
df = df.dropna(subset=['my_col'])
【参考方案1】:
所以python有短路逻辑运算符not
、and
、or
。这些在 python 中具有非常特定的含义,不能被覆盖(not
必须返回 bool
和 a and/or b
总是返回 a
或 b
或抛出错误。
不过,python 也有可重载的布尔运算符~
(非)、&
(与)、|
(或)和^
(异或)。
您可能将它们识别为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
。
【讨论】:
感谢您的解释和另一个例子。以上是关于Python Pandas:获取列不为空的DataFrame的行的主要内容,如果未能解决你的问题,请参考以下文章