我知道一个可怕的错误信息“不工作”,但它就是那么简单。我的数据集包含年份和组标识year
和group
。
我以前的代码是
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()
?
答案 0 :(得分:1)
从the documentation传递序列到Pandas 0.13.1中的第一个参数(cols
)时,您将在识别重复项时给出要考虑的列的名称。
因此,正确的sintax使用单括号[]
,()
,因为它们将产生您想要的序列。在您的情况下,使用双括号将生成一系列列表,这不代表您要查找的列标签。
答案 1 :(得分:0)
drop_duplicates
期望第一个参数的标签或标签列表。您通过放置两组括号创建的是标签列表的列表。当你这样做时,熊猫并不知道它在看什么。
我总是在python
中使用双括号[[]]
进行切片等
最有可能的是,要么你没有按照你的想法做到这一点,要么你的代码充满了笨拙的数据结构和奇怪的代码来处理它们。在正常情况下(例如这里),双括号将是一个错误,你已经注意到了。我建议重新检查你使用过双支架的地方;我不能告诉他们是否应该仅根据这些信息进行更改。