【问题标题】:df.duplicated() false positives?df.duplicated() 误报?
【发布时间】:2013-06-28 13:02:10
【问题描述】:

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

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

我正在尝试重塑数据框以生成宽数据框,但出现错误:

ReshapeError: Index contains duplicate entries, cannot reshape

我用过:

data[data.duplicated()]

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

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

来自已排序 csv 文件的示例:

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

我知道这是一个很长的机会,但你知道可能是什么原因造成的吗?每个索引列中的数据类型为 ['year': int; “国家”:str,“产品代码”: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 [2013 年 6 月 28 日]:

在我的 IPython 会话期间,这似乎是一个奇怪的内存问题。 今天早上的新鲜实例,似乎工作正常,无需对昨天的代码进行任何调整即可重塑数据!如果问题再次出现,我将进一步调试并通知您。任何人都知道 IPython 会话的良好调试器?

【问题讨论】:

  • 你能试试 data.index.get_duplicates() 并粘贴你得到的东西吗?您得到的错误是 Index 包含重复项,而不是行。
  • 谢谢汤姆...我还没有看到索引类型的 get_duplicates() 方法。有助于了解! :)
  • 对于调试器,检查 ipdb。它在终端和 QtConsole 中运行良好,我认为在即将发布的 IPython 1.0 版本中将支持 notebook。
  • 太棒了! ...谢谢汤姆。

标签: python pandas


【解决方案1】:

不妨试试

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

【讨论】:

  • 谢谢韦斯!我没有想到的好方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 2019-01-20
  • 2019-01-20
  • 2021-01-18
相关资源
最近更新 更多