如何使用变量筛选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
相关产品推荐
相关产品推荐

