以 PEP8 方式检查 pandas 重复项

Check for pandas duplicates in a PEP8 way

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

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

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

Unresolved attribute reference 'sum' for class 'bool'

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

这与 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):
    ...

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

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

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