我能想到检查pandas数据帧中重复项的最简单方法如下:
if (df["col1"].value_counts() > 1).sum() > 0:
raise ValueError("dupes in column 'col1'!")
问题是这不符合PEP8。我的IDE中的代码检查器(我使用PyCharm)告诉我:
未解析的属性引用' sum'为了班级' bool'
检查pandas重复项的可接受方法是什么,而不添加多行代码?
答案 0 :(得分:3)
您的错误与PEP8无关。实际上,您的错误似乎是误报:您的IDE似乎猜测比较操作的结果是布尔值,因此没有sum
或any
方法
但您的语法没有任何问题:df["col1"].value_counts() > 1
返回一个布尔pd.Series
对象,该对象有sum
和any
方法。
我建议的唯一解决方案是使用另一个IDE。或者禁用您的代码检查程序。
答案 1 :(得分:1)
这与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):
...