有没有一种简单有效的方式来检查基于列的Python数据帧中的重复项(而不是删除它们)?
我想检查数据帧是否根据某些列具有重复项,如果有,就会失败该过程。
TIA。
有没有一种简单有效的方式来检查基于列的Python数据帧中的重复项(而不是删除它们)?
我想检查数据帧是否根据某些列具有重复项,如果有,就会失败该过程。
TIA。
如果您也想实际检查重复项,可以执行
df \
.groupby(['column1', 'column2']) \
.count() \
.where('count > 1') \
.sort('count', ascending=False) \
.show()
最简单的方法是检查数据框中的行数是否等于去重后的行数。
if df.count() > df.dropDuplicates([listOfColumns]).count():
raise ValueError('Data has duplicates')
join
或subtract
方法可能会有所帮助。 - David检查重复项的另一种方法是:
df.exceptAll(df.dropDuplicates([listOfColumns]))
要获取具有重复行的pyspark dataframe,可以使用以下代码:
df_duplicates = df.groupBy(df.columns).count().filter("count > 1")
您可以对一组列进行去重,计算不同行的数量,并将其与总行数进行比较。如果它们相同,则没有重复行。如果不同行的数量小于总行数,则存在重复项。
df.select(list_of_columns).distinct().count()
和
df.select(list_of_columns).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
记录重复/唯一百分比,也可以记录失败的过程等。