Pandas按列值过滤行时非目标列返回NaN问题求解
问题成因
你构造DataFrame所用字典的键均为长度为1的元组(例如('Weights',)而非普通字符串Weights),因此生成的DataFrame列名本质是元组类型,打印时的显示效果会省略元组的括号,让你误以为列名是普通字符串。
你使用字符串Weights做列索引时,无法匹配到实际的元组列名,导致布尔索引逻辑异常,最终返回保留全量行、仅Weights列符合条件的位置有值、其余全为NaN的错误结果。
解决方法
两种方案可按需选择:
- 方案一:过滤时直接使用实际的元组列名构造条件
results[results[('Weights',)] == 'uniform']
- 方案二:先把列名统一替换为普通字符串,后续按常规写法操作即可
# 批量提取元组的首个元素作为新列名 results.columns = [col[0] for col in results.columns] # 后续可直接使用你原本的过滤写法 results[results['Weights'] == 'uniform']
内容的提问来源于stack exchange,提问作者Radmil Raychev
相关产品推荐
相关产品推荐

