我有一个熊猫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
中没有重复的行,但很可能是我误解了索引的创建方式)。
答案 0 :(得分:0)
如果索引中包含重复的值,则在执行reset_index可能会有所帮助。这样会将您当前的索引设置为列,并添加一个新的顺序索引(具有唯一值)。
df = df.reset_index()
这两种方法不相同的原因是,在一种情况下,您传递了一系列布尔值,这些布尔值表示要保留的行和要删除的行(此处的索引值无关)。对于下降的情况,您要传递一个索引值列表(映射到多个位置)。
最后,要检查索引是否存在重复项,则不应检查重复的行。只需:
df.index.has_duplicates