【问题标题】:Python Pandas: get rows of a DataFrame where a column is not nullPython Pandas:获取列不为空的DataFrame的行
【发布时间】: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'])

标签: python pandas dataframe


【解决方案1】:

所以python有短路逻辑运算符notandor。这些在 python 中具有非常特定的含义,不能被覆盖(not 必须返回 boola and/or b 总是返回 ab 或抛出错误。

不过,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

【讨论】:

  • 感谢您的解释和另一个例子。
猜你喜欢
  • 2018-09-16
  • 2017-06-02
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
相关资源
最近更新 更多