python - .drop 和非唯一索引的 Python pandas 问题
问题描述
我有一个 pandas DataFrame,比如说df
,我正在尝试通过索引删除某些行。具体来说:
myindex = df[df.column2 != myvalue].index
df.drop(myindex, inplace = True)
这对于大多数 DataFrame 来说似乎工作得很好,但是奇怪的事情似乎发生在一个 DataFrame 上,我得到一个非唯一索引myindex
(我不太清楚为什么,因为 DataFrame 没有重复的行)。更准确地说,删除的值比索引中的值多得多(在极端情况下,我实际上删除了所有行,即使有几百行column2
has myvalue
)。仅提取唯一值(myindex.unique()
并使用唯一索引删除行也无济于事。同时,
df = df[df.column2 != myvalue]
就像我想要的那样工作。我宁愿使用 inplace drop 但是更重要的是我想了解为什么结果与直接分配和使用索引的 drop 方法不同。
不幸的是,我无法提供数据,因为这些数据无法发布,而且由于我不确定到底出了什么问题,我也无法模拟它们。但是,我怀疑它可能与myindex
非唯一性有关(这也让我感到困惑,因为其中没有重复的行,df
但很可能是我误解了索引的创建方式)。
解决方案
如果您的索引中有重复的值,那么在执行 reset_index 之前可能会有所帮助。这会将您当前的索引设置为一列,并添加一个新的顺序索引(具有唯一值)。
df = df.reset_index()
两种方法不同的原因是,在一种情况下,您传递了一系列布尔值,这些布尔值表示要保留的行和要删除的行(索引值在这里不相关)。在 drop 的情况下,您传递的是索引值列表(映射到多个位置)。
最后,要检查你的索引是否有重复,你不应该检查重复的行。只需这样做:
df.index.has_duplicates
推荐阅读
- prometheus - 上传文件大小的 Prometheus 指标
- debugging - 在调试期间在哪里以及如何查看 vscode 中的返回值(或者如果在 gdb 中不可能)
- sql-server - 无法将 Powershell 连接到 AzureSQL 数据库
- symfony - Symfony 使用多个实体
- highcharts - 屏幕压缩到 1280*1024 分辨率时,Highcharts 图表 x 轴标签丢失
- c# - 如何从 datetimepicker 仅获取日期的分隔值?
- excel - Office.js | excel插件 | 不允许在特定单元格范围内呈现数据
- javascript - 车把js中的“如果全部”
- html - 在文本换行时扩展 div(包括 img)的高度
- tensorflow - 将暗网模型转换为张量流模型