是否有一种简单有效的方法可以基于列检查python Dataframe 中的重复项(而不是删除它们)?我想检查 Dataframe 是否有基于列组合的重复,如果有,则使该过程失败。短暂性脑缺血发作
628mspwn1#
如果您还想实际检查重复项,可以执行以下操作
df \ .groupby(['column1', 'column2']) \ .count() \ .where('count > 1') \ .sort('count', ascending=False) \ .show()
zy1mlcev2#
最简单的方法是检查 Dataframe 中的行数是否等于删除重复项后的行数。
if df.count() > df.dropDuplicates([listOfColumns]).count(): raise ValueError('Data has duplicates')
oyjwcjzk3#
另一种检查重复项的方法是:
df.exceptAll(df.dropDuplicates([listOfColumns]))
jv4diomz4#
您可以计算一组数据行上的非重复数据列数目,并将其与总数据列数目比较。如果它们相同,则没有重复数据列。如果非重复数据列数目小于总数据列数目,则有重复数据列存在。df.select(list_of_columns).distinct()和df.select(list_of_columns).count()
df.select(list_of_columns).distinct()
df.select(list_of_columns).count()
yv5phkfx5#
不需要调用count()两次,只需一次操作即可获得两个计数。
count()
from pyspark.sql import functions as F cols = ['col1', 'col2', 'col3'] counts_df = df.select([ F.countDistinct(*cols).alias('n_unique'), F.count('*').alias('n_rows') ]) n_unique, n_rows = counts_df.collect()[0]
现在,使用n_unique、n_rows,可以记录重复/唯一百分比,可以使流程失败等。
n_unique
n_rows
5条答案
按热度按时间628mspwn1#
如果您还想实际检查重复项,可以执行以下操作
zy1mlcev2#
最简单的方法是检查 Dataframe 中的行数是否等于删除重复项后的行数。
oyjwcjzk3#
另一种检查重复项的方法是:
jv4diomz4#
您可以计算一组数据行上的非重复数据列数目,并将其与总数据列数目比较。如果它们相同,则没有重复数据列。如果非重复数据列数目小于总数据列数目,则有重复数据列存在。
df.select(list_of_columns).distinct()
和df.select(list_of_columns).count()
yv5phkfx5#
不需要调用
count()
两次,只需一次操作即可获得两个计数。现在,使用
n_unique
、n_rows
,可以记录重复/唯一百分比,可以使流程失败等。