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

Pandas按值筛选行失效问题求助

解决pandas筛选行时返回全NaN的问题

问题原因

你遇到的全NaN结果,核心问题是用来筛选的MT是一个单列DataFrame,而非pandas布尔索引所需的一维布尔Series。当用DataFrame作为索引切片原DataFrame时,pandas会尝试对齐两者的列名——但你的MT列名和df_test的列名不匹配,所有不匹配的列就会被填充为NaN。

从你提供的MT.info()输出能明确看出:它是一个仅含1列的DataFrame,而非Series。正常情况下df_test.diagnosis == 0应该返回Series,大概率是你不小心用了双重方括号(比如df_test[['diagnosis']] == 0),才会得到DataFrame类型的结果。

解决方案

只需要确保筛选条件是布尔Series而非DataFrame,有几种简单可行的方式:

方式1:修正布尔条件的写法

获取布尔Series的正确方式是用单索引(或直接访问列属性):

# 推荐用单引号索引,兼容性更强(比如列名含空格时也能正常使用)
MT = df_test['diagnosis'] == 0
# 若列名无特殊字符,也可以用属性访问:MT = df_test.diagnosis == 0

你可以用type(MT)验证,结果应为pandas.core.series.Series,而非DataFrame。

方式2:直接一步筛选(无需中间变量)

跳过中间变量MT,直接在索引中写入条件,写法更简洁:

df_filtered = df_test[df_test['diagnosis'] == 0]

方式3:用.loc明确筛选(可读性更强,避免歧义)

如果想更清晰地指定行和列的筛选范围,推荐使用.loc方法:

# 冒号表示保留所有列
df_filtered = df_test.loc[df_test['diagnosis'] == 0, :]

验证结果

修正后再查看筛选后的df_filtered,就能得到diagnosis列值为0的所有目标行,不会再出现全NaN的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:30:21