Python熊猫问题与.drop和非唯一索引

时间:2019-03-11 14:39:11

标签: python pandas dataframe

我有一个熊猫DataFrame,例如df,我正在尝试通过索引删除某些行。具体来说:

myindex = df[df.column2 != myvalue].index
df.drop(myindex, inplace = True)

这似乎对大多数DataFrame都很好,但是对于一个DataFrame来说,我得到一个非唯一的索引myindex似乎发生了奇怪的事情(我不确定为什么,因为DataFrame没有重复的行)。更准确地说,删除的值比索引中的值多得多(在极端情况下,即使column2具有myvalue的几百行,我实际上也会删除所有行)。仅提取唯一值(myindex.unique()并使用唯一索引删除行也无济于事。同时,

df = df[df.column2 != myvalue]

可以按照我的意愿工作。不过,我宁愿使用就地放置,但更重要的是,我想了解为什么直接赋值和使用索引的放置方法的结果不一样。

不幸的是,我无法提供这些数据,因为这些数据无法发布,并且由于我不确定到底出了什么问题,因此也无法模拟它们。但是,我怀疑它可能与myindex不唯一有关(这也使我感到困惑,因为df中没有重复的行,但很可能是我误解了索引的创建方式)。

1 个答案:

答案 0 :(得分:0)

如果索引中包含重复的值,则在执行reset_index可能会有所帮助。这样会将您当前的索引设置为列,并添加一个新的顺序索引(具有唯一值)。

df = df.reset_index()

这两种方法不相同的原因是,在一种情况下,您传递了一系列布尔值,这些布尔值表示要保留的行和要删除的行(此处的索引值无关)。对于下降的情况,您要传递一个索引值列表(映射到多个位置)。

最后,要检查索引是否存在重复项,则不应检查重复的行。只需:

df.index.has_duplicates