pandas drop_duplicates方法不起作用

时间:2017-05-08 19:07:35

标签: python pandas

我正在尝试在我的数据帧上使用drop_duplicates方法,但我得到了一个 错误。请参阅以下内容:

  

错误:TypeError:不可用类型:' list'

我正在使用的代码:

df = db.drop_duplicates()

我的数据库非常庞大,包含字符串,浮点数,日期,NaN,布尔值,整数......感谢任何帮助。

3 个答案:

答案 0 :(得分:7)

drop_duplicates不会使用数据框中的列表,因为错误消息意味着。但是,您可以删除作为str的数据帧上的重复项,然后使用结果中的索引从原始df中提取行。

<强>设置

df = pd.DataFrame({'Keyword': {0: 'apply', 1: 'apply', 2: 'apply', 3: 'terms', 4: 'terms'},
 'X': {0: [1, 2], 1: [1, 2], 2: 'xy', 3: 'xx', 4: 'yy'},
 'Y': {0: 'yy', 1: 'yy', 2: 'yx', 3: 'ix', 4: 'xi'}})

#Drop directly causes the same error
df.drop_duplicates()
Traceback (most recent call last):
...
TypeError: unhashable type: 'list'

<强>解决方案

#convert hte df to str type, drop duplicates and then select the rows from original df.

df.iloc[df.astype(str).drop_duplicates().index]
Out[205]: 
  Keyword       X   Y
0   apply  [1, 2]  yy
2   apply      xy  yx
3   terms      xx  ix
4   terms      yy  xi

#the list elements are still list in the final results.
df.iloc[df.astype(str).drop_duplicates().index].loc[0,'X']
Out[207]: [1, 2]

答案 1 :(得分:3)

@Allen的回答很好,但有一点问题。

var mobile_count = mobile.counts.find(f=>f['date']=='2018-09-07');//replace the static date with the date you want to fetch the count from 

在示例中,它应该是loc而不是iloc.loot。

count

答案 2 :(得分:1)

概述:您可以看到哪些行重复了

方法1:

df2=df.copy()
mylist=df2.iloc[0,1]
df2.iloc[0,1]=' '.join(map(str,mylist))

mylist=df2.iloc[1,1]
df2.iloc[1,1]=' '.join(map(str,mylist))

duplicates=df2.duplicated(keep=False)
print(df2[duplicates])

方法2:

print(df.astype(str).duplicated(keep=False))