如何基于前N列删除DataFrame行?删除前三列均为0的行(不使用列名)
解决DataFrame删除前三列全为0行的问题
没问题,这种不依赖列名的场景我经常碰到,毕竟列名变动太常见了。下面给你两种简洁的实现方式,都能精准删除前三列数值全为0的行:
方法一:直接过滤(推荐)
一行代码搞定,用布尔索引直接保留符合条件的行:
import pandas as pd # 假设你的DataFrame名为df df = df[~df.iloc[:, :3].eq(0).all(axis=1)]
代码解释:
df.iloc[:, :3]:通过位置选取所有行的前三列,完全不依赖列名,不管列名怎么变都生效.eq(0):将前三列的每个元素转换为布尔值(等于0则为True,否则False).all(axis=1):按行判断,当某一行的前三列全为True(也就是全0)时返回True~:取反操作,保留那些前三列不全为0的行
方法二:先定位再删除
如果你想更清晰地看到要删除的行,可以先获取这些行的索引,再执行删除:
# 找出前三列全为0的行索引 drop_indices = df[df.iloc[:, :3].eq(0).all(axis=1)].index # 删除指定索引的行 df = df.drop(drop_indices)
举个实际例子:
假设你的原始DataFrame是这样的:
任意列名1 任意列名2 任意列名3 其他列 0 1 2 3 4 1 0 0 0 5 2 0 0 0 6 3 7 8 9 10
运行上述代码后,会删除索引1和2对应的行(也就是你说的第2、3行),最终结果如下:
任意列名1 任意列名2 任意列名3 其他列 0 1 2 3 4 3 7 8 9 10
内容的提问来源于stack exchange,提问作者Number Logic
相关产品推荐
相关产品推荐

