drop_duplicates()带双括号[[]]

时间:2014-05-05 07:26:40

标签: python pandas

我知道一个可怕的错误信息“不工作”,但它就是那么简单。我的数据集包含年份和组标识yeargroup

我以前的代码是

df = df.reset_index().drop_duplicates([['year', 'gvkey']]).set_index(['year', 'gvkey'], drop=True)

但是,df.index.is_unique会返回false。困惑,我看了一些数据,确实:

>>> asd = df.head().reset_index()
>>> asd
Out[575]: 
   year  gvkey   sic state  naics
0  1966   1000  3089   NaN    NaN
1  1966   1000  3089   NaN    NaN
2  1972   1000  3089   NaN    NaN
3  1976   1000  3089   NaN    NaN
4  1984   1001  5812    OK    722
>>> asd.drop_duplicates([['year', 'gvkey']])
Out[576]: 
   year  gvkey   sic state  naics
0  1966   1000  3089   NaN    NaN
1  1966   1000  3089   NaN    NaN
4  1984   1001  5812    OK    722

然而,随机抽搐之后,我也尝试过:

>>> asd.drop_duplicates(['year', 'gvkey'])
Out[577]: 
   year  gvkey   sic state  naics
0  1966   1000  3089   NaN    NaN
2  1972   1000  3089   NaN    NaN
3  1976   1000  3089   NaN    NaN
4  1984   1001  5812    OK    722

这给了我我的预期。现在我最终感到困惑。两个符号之间究竟有什么区别 - 我总是在python中使用双括号[[]]进行切片等。我是否需要修改所有代码,还是仅针对drop_duplicates()

2 个答案:

答案 0 :(得分:1)

the documentation传递序列到Pandas 0.13.1中的第一个参数(cols)时,您将在识别重复项时给出要考虑的列的名称。

因此,正确的sintax使用单括号[](),因为它们将产生您想要的序列。在您的情况下,使用双括号将生成一系列列表,这不代表您要查找的列标签。

答案 1 :(得分:0)

drop_duplicates期望第一个参数的标签或标签列表。您通过放置两组括号创建的是标签列表的列表。当你这样做时,熊猫并不知道它在看什么。

  

我总是在python

中使用双括号[[]]进行切片等

最有可能的是,要么你没有按照你的想法做到这一点,要么你的代码充满了笨拙的数据结构和奇怪的代码来处理它们。在正常情况下(例如这里),双括号将是一个错误,你已经注意到了。我建议重新检查你使用过双支架的地方;我不能告诉他们是否应该仅根据这些信息进行更改。