df.duplicated()误报?

时间:2013-06-27 09:22:05

标签: python pandas

我有一个数据框,包含2,865,044个带有3级MultiIndex的条目

MultiIndex.levels.names = ['year', 'country', 'productcode']

我正在尝试重塑数据帧以生成宽数据帧,但我收到错误:

ReshapeError: Index contains duplicate entries, cannot reshape

我用过:

data[data.duplicated()]

标识导致错误的行,但它列出的数据似乎不包含任何重复项。

这导致我使用to_csv()导出我的数据帧并在Stata中打开数据并使用duplicates list命令查找数据集不包含重复项(根据stata)。

已排序的csv文件中的示例:

year country productcode duplicate
1962    MYS     711       FALSE
1962    MYS     712       TRUE
1962    MYS     721       FALSE

我知道这是一个长镜头,但想法可能导致这个?每个索引列中的数据类型是['year':int; 'country':str,'productcode':str]。可能是熊猫如何定义独特的群体?列出违规索引线的更好方法是什么?

更新 我试过重置索引

temp = data.reset_index()
dup = temp[temp.duplicated(cols=['year', 'country', 'productcode'])]

我得到一个完全不同的名单!

year    country productcode
1994      HKG      9710
1994      USA      9710
1995      HKG      9710
1995      USA      9710

更新了2 [28JUNE2013]:

在我的IPython会话期间,这似乎是一个奇怪的内存问题。 今天上午的新鲜实例,似乎工作正常并重塑数据而不对昨天的代码进行任何调整!如果问题返回并且让您知道,我将进一步调试。有人知道IPython会话的好调试器吗?

1 个答案:

答案 0 :(得分:3)

也许试试

cleaned = df.reset_index().drop_duplicates(df.index.names)
cleaned.set_index(df.index.names, inplace=True)

我认为索引中应该有一个duplicated方法,还没有

https://github.com/pydata/pandas/issues/4060