使用.drop_duplicates(),Pandas不会因缺少列而引发KeyError

时间:2018-02-16 10:35:39

标签: python python-3.x pandas

Pandas刚刚发生的事情让我更加信任它,有谁知道它为什么会这样?无论如何,对于这个小例子很容易看到,但是对于更大的数据帧,人们需要注意..我几乎犯了一些错误。

df = pd.DataFrame({"A":[34,12,78,84,26], "B":[54,87,35,81,87], "C":[56,78,0,14,13], "D":[0,87,72,87,14], "E":[78,12,31,0,34]}) 
>> df

enter image description here

然后,如果你找到一个不存在的列:

df['b']
KeyError: 'b'

但是 -

df.drop_duplicates(['b', 'D'])

...运行没有错误,并在D列中找到错误。

enter image description here

实际上,df.drop_duplicates(['D'])会产生完全相同的结果。

它错过了一个重复的行但是在B列中也错过了一行,因为它拼写错误。它不会警告您或引发错误。

使用Pandas 0.22.0和Python 3.6.4。

df.drop_duplicates(['B','D'])只返回原始数据帧而不丢弃任何内容。我错过了什么或熊猫破了吗?

1 个答案:

答案 0 :(得分:1)

Pandas版本0.20.3 python 3.6。

当我运行这行代码时:

df.drop_duplicates(['b', 'D'])

  

KeyError:'b'

在你的例子中,第4行是奇怪的情况。

首先

df.loc[4,'B'] = 87

删除后重复:

df.loc[4,'B'] = 82

看起来你在这些步骤之间有一些额外的操作。