我使用Pandas读取了一个csv文件。然后,我正在使用以下代码检查数据中是否有任何重复的行:
import pandas as pd
df= pd.read_csv("data.csv", na_values=["", " ", "-"])
print df.shape
>> (71644, 15)
print df.drop_duplicates().shape
>> (31171, 15)
我发现有一些重复的行,所以我想查看哪些行出现多次:
data_groups = df.groupby(df.columns.tolist())
size = data_groups.size()
size[size > 1]
这样做我得到Series([], dtype: int64)
。
此外,我可以找到重复的行执行以下操作:
duplicates = df[(df.duplicated() == True)]
print duplicates.shape
>> (40473, 15)
所以df.drop_duplicates()
和df[(df.duplicated() == True)]
表示有重复的行但groupby
没有。
我的数据包括字符串,整数,浮点数和nan。
我是否误解了上面提到的功能或其他事情?
答案 0 :(得分:4)
只需添加reset_index()
即可将聚合重新对齐到新数据框。
此外,size()
函数会创建一个未标记的0列,您可以使用该列过滤重复的行。然后,只需找到结果数据帧的长度,就像其他函数一样输出重复项的计数:drop_duplicates()
,duplicated()==True
。
data_groups = df.groupby(df.columns.tolist())
size = data_groups.size().reset_index()
size[size[0] > 1] # DATAFRAME OF DUPLICATES
len(size[size[0] > 1]) # NUMBER OF DUPLICATES