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

Pandas DataFrame中None与NaN显示不同?二者是否可互换?

Pandas中None与NaN显示差异但equals返回True的原因及互换性解析

代码示例

import pandas as pd
import io

df1 = pd.DataFrame({'a':[None]})
s = df1.to_json(orient='table')
df2 = pd.read_json(io.StringIO(s), orient='table')

df1输出:

a
0   None

df2输出:

a
0   NaN

显示差异的原因

直接创建的df1里,None属于Python对象,此时列a的数据类型是object,Pandas会直接显示None;而通过JSON序列化再读取的过程中,JSON本身没有None的概念,会把缺失值序列化为NaN,读取后Pandas将其识别为浮点型缺失值,列a的数据类型变为float64,所以显示为NaN。

为何df1.equals(df2)返回True

Pandas的equals()方法在比较DataFrame时,会把None和NaN统一视为缺失值,只要对应位置都是缺失状态,就判定为相等,不会纠结显示的符号差异。

None与NaN在Pandas中的互换性

两者在多数缺失值处理场景下可以互换,但并非完全等价:

  • 当列是object类型时,None和NaN都代表缺失值,但None是Python对象,NaN是浮点型;
  • 若列是数值类型(如int、float),None会被自动转为NaN,因为数值类型无法存储Python对象;
  • 使用isnull()、notnull()等函数时,两者都会被识别为缺失值;
  • 但用==直接比较单个值时(比如df1['a'][0] == df2['a'][0])会返回False,因为Python中None == NaN本身就是False,这种场景下两者有区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:05