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

如何使用变量筛选pandas DataFrame行,解决过滤结果出现NaN的问题

Pandas按变量指定列筛选数据解决方案

问题根源

你定义的ft是列表类型,df[ft]返回的是DataFrame结构而非单列Series,用df[ft]==3判断后得到的是同维度的布尔值DataFrame。直接把这个布尔DataFrame传入df[]索引时,pandas会逐元素匹配判断,不符合条件的位置会直接置为NaN,无法实现整行筛选的效果。

可用解决方案

方案1:ft仅指定单个筛选列时

直接取列表的第一个元素获取列名,生成单列布尔Series做整行筛选即可:

import pandas as pd
df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])
ft = ["a"]
dt = df[df[ft[0]] == 3]
print(dt)

运行结果完全符合预期:

a  b
1  3  4

方案2:ft可能包含多个筛选列时

如果后续需要支持多列筛选逻辑,可配合any(axis=1)(任意一列满足条件)或者all(axis=1)(所有列都满足条件)对整行的布尔结果做聚合判断:

import pandas as pd
df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])
ft = ["a"]
# 整行判断是否有符合条件的列
dt = df[(df[ft] == 3).any(axis=1)]
print(dt)

运行结果和方案1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:27:04