在Pandas

时间:2015-10-19 23:30:18

标签: python pandas

我使用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。

我是否误解了上面提到的功能或其他事情?

1 个答案:

答案 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