You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何按位置选取列并按值筛选对应行?

按未知列名的指定位置列筛选DataFrame行

假设你有如下DataFrame,其中某一位置的列名是不确定的(比如示例中位置为2的列,可能是HasCar、IsStaff或其他名称),需要筛选该列值为1的所有行:

import pandas as pd
xx = pd.DataFrame([{'ID':1, 'Name': 'Abe', 'HasCar':1},
      {'ID':2, 'Name': 'Ben', 'HasCar':0},
      {'ID':3, 'Name': 'Cat', 'HasCar':1}])

问题原因

你之前尝试用xx.iloc[:,[2]] == 1得到布尔DataFrame,再用来索引时出现大量NaN,是因为单列DataFrame做布尔索引时,Pandas会按列名匹配,只有目标列会保留符合条件的值,其他列因无匹配布尔列而填充NaN。而xx['HasCar']返回的是Series,布尔索引会直接匹配行,所以能得到正确结果。

解决方法

方法1:直接获取单列Series(推荐)

使用iloc[:, 2](不带内层方括号)直接取位置为2的列,返回Series,再做布尔索引:

# 筛选位置为2的列值为1的行
filtered_df = xx[xx.iloc[:, 2] == 1]

执行结果:

ID Name  HasCar
0   1  Abe       1
2   3  Cat       1

方法2:将单列DataFrame转为Series

如果已经得到单列DataFrame,可以用squeeze()方法将其转为Series:

target_col = xx.iloc[:, [2]].squeeze()
filtered_df = xx[target_col == 1]

方法3:提取numpy数组做索引

通过.values获取底层numpy数组,展平后做布尔索引:

filtered_df = xx[xx.iloc[:, [2]].values.flatten() == 1]

内容的提问来源于stack exchange,提问作者RedM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:05:22