【发布时间】:2016-06-30 06:42:20
【问题描述】:
当索引不保证唯一时,我正在寻找一种方法来删除 pandas DataFrame 中的行。
所以,我想从我的 DataFrame df 中删除项目 0 和 4。这将是您用来执行此操作的典型代码:
df.drop([0, 4].index)
如果每个索引都是唯一的,这很好用。但是,如果项目 0、1 和 2 都具有相同的索引,则此代码会删除项目 0、1、2 和 4,而不仅仅是 0 和 4。
我的 DataFrame 设置这种方式是有充分理由的,所以我不想重构我的数据,它看起来大致如下:
age
site
mc03 0.39
mc03 0.348
mc03 0.348
mc03 0.42
mc04 0.78
我试过了:
del df.iloc[0]
但这失败了:
AttributeError: __delitem__
对于如何完成这项任务还有其他建议吗?
更新:
我找到了两种方法,但都不是特别优雅。
to_drop = [0, 4]
df = df.iloc[sorted(set(range(len(df))) - set(to_drop))]
# or:
df = df.iloc[[i for i in range(len(df)) if i not in to_drop]]
也许这和它会得到的一样好?
【问题讨论】: