【问题标题】:Check for pandas duplicates in a PEP8 way以 PEP8 方式检查 pandas 重复项
【发布时间】:2018-11-15 12:45:13
【问题描述】:

我能想到的在 pandas 数据框中检查重复项的最简单方法如下:

if (df["col1"].value_counts() > 1).sum() > 0:
    raise ValueError("dupes in column 'col1'!")

问题在于这不符合 PEP8。我的 IDE(我使用 PyCharm)中的代码检查器告诉我:

类“bool”的未解析属性引用“sum”

在不添加多行代码的情况下,检查 pandas 重复项的可接受方法是什么?

【问题讨论】:

  • 为了社区的利益,您能否解释一下为什么您的代码不符合 PEP8 标准?
  • 我(可能是错误的)看不出这怎么不符合 PEP8。
  • @jpp 我已经编辑了我的问题来解释我收到的警告。
  • 虽然这不是 PEP8.. 那是你的 linter 有问题。
  • 你应该在 linter 上提交一个错误。 :)

标签: python pandas pycharm pep8


【解决方案1】:

您的错误与 PEP8 无关。事实上,您的错误似乎是误报:您的 IDE 似乎猜测比较操作的结果是布尔值,因此没有 sumany 方法。

但是您的语法没有问题:df["col1"].value_counts() > 1 返回一个布尔型 pd.Series 对象,该对象确实具有 sumany 方法。

我可以建议的唯一解决方案是使用另一个 IDE。或者禁用您的代码检查器。

【讨论】:

  • 谢谢@jpp。虽然这在技术上是正确的,但在一个小的 linting 问题上切换 IDE 感觉有点矫枉过正。
  • @lebelinoz,当然.. 所以禁用代码检查功能可能是前进的方向。当然,我是有偏见的。我宁愿使用记事本而不是 PyCharm。
  • @lebelinoz。无需切换 IDE 或禁用整个代码检查功能。 jetbrains.com/help/pycharm/suppressing-inspections.html
【解决方案2】:

这与 PEP8 合规性无关,但您可能正在寻找的是:

if (df.col1.value_counts() > 1).any():
    raise ValueError("dupes in column 'col1'!")

请注意,这会忽略 None/NaN/NaT 值,即使用此方法您不会找到重复的 na。如果需要,请将dropna=False 添加到value_counts 调用中。

但是请注意,这不是最快的方法。例如,更快的测试是:

if len(set(df.col1.values)) != len(df.col1):
    ...

【讨论】:

  • 这给了我同样的警告:Unresolved attribute reference 'any' for class 'bool'
  • 啊,你说的是 IDE 警告,我明白了。然后@jpp 在相邻的答案中正确解释了这种情况。根据 IDE 或检查器,可能有一种方法可以禁用此特定行的警告。
  • 切换 IDE 感觉有点矫枉过正,但我​​喜欢你的 len(set(...)) != len(...) 解决方案,如果它能让我的程序更高效(我需要添加一些 .dropna() 修饰符)。
猜你喜欢
  • 2014-11-20
  • 2012-05-21
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多