[英]Python pandas issues with .drop and a non-unique index
我有一个熊猫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
中没有重复的行,但很可能是我误解了索引的创建方式)。
如果索引中包含重复的值,那么在执行reset_index可能会有所帮助。 这会将您的当前索引设置为列,并添加一个新的顺序索引(具有唯一值)。
df = df.reset_index()
两种方法不相同的原因是,在一种情况下,您传递了一系列布尔值,这些布尔值表示要保留的行和要删除的行(此处的索引值无关)。 对于下降的情况,您要传递一个索引值列表(映射到多个位置)。
最后,要检查索引是否重复,则不应检查重复的行。 简单地说:
df.index.has_duplicates
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.