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

Pandas按列名与索引下标定位列的NaN处理差异问题咨询

问题原因核心说明

两段代码的差异本质是选取列返回的数据结构不同,导致布尔运算后的索引逻辑存在差异:

  • 代码1中 df["Maximum temperature (C)"] 选取单列返回的是一维Series对象:
    Pandas中对Series做布尔比较时,NaN和任何数值比较的结果都是NaN,当你使用这个包含NaN的布尔Series筛选原数据行时,Pandas默认会过滤掉结果为NaN的行,最终呈现的效果就是“自动剔除了包含NaN值的行”。
  • 代码2中 df[[3]] 选取单列返回的是二维DataFrame对象:
    注意这里你传入的索引是列表[3],只要用列表包裹列索引,不管是1个还是多个列,返回结果都是DataFrame结构。对DataFrame做布尔比较时,NaN参与运算得到的结果依然是NaN,但用布尔DataFrame做行筛选时,Pandas不会自动剔除NaN对应的行,而是会把这些行的结果保留为NaN,所以呈现出“保留含NaN值的行”的效果。

行为统一方案

你可以通过调整列选取的写法,让两段代码的执行结果一致:

  • 要让代码2也剔除NaN行:把写法改成 df[3] > 35,不加列表包裹索引3,返回Series即可
  • 要让代码1也保留NaN行:把写法改成 df[["Maximum temperature (C)"]] > 35,用列表包裹列名,返回DataFrame即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:24:02