如何通过列号删除DataFrame中值处于20至50之间的行?
解决方法:通过列号删除指定范围的行
没问题,这事儿其实很简单,咱们直接用pandas的**位置索引(iloc)**来定位第一列就行,完全不用依赖列名。
核心实现代码
你需要保留第一列值≤20 或者 ≥50的行,直接用布尔索引过滤即可:
# 过滤并重新赋值给df,保留符合条件的行 df = df[(df.iloc[:, 0] <= 20) | (df.iloc[:, 0] >= 50)]
代码细节解释
df.iloc[:, 0]:iloc是pandas专门用于按位置索引的方法,:表示选中所有行,0表示选中第一列(pandas的列位置从0开始计数)。(df.iloc[:,0] <=20) | (df.iloc[:,0] >=50):生成一个布尔数组,标记哪些行需要保留(满足其中一个条件即可)。- 将这个布尔数组传入df,就会自动筛选出符合条件的行,替换原来的df。
另一种等价写法(取反逻辑)
如果你更习惯用“删除大于20且小于50的行”的直接逻辑,也可以这样写:
df = df[~((df.iloc[:, 0] > 20) & (df.iloc[:, 0] < 50))]
这里的~表示对布尔条件取反,也就是排除掉20 < 值 <50的行,效果和上面的代码完全一致。
为什么之前的代码可能出错?
如果之前你直接用df[:,0]这种写法,pandas会报错——因为DataFrame不支持直接用[:,0]取列,必须用iloc(按位置)或者loc(按列名),所以iloc[:,0]才是正确的按位置选取第一列的方式。
内容的提问来源于stack exchange,提问作者Mauro Napoli
相关产品推荐
相关产品推荐

