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

Pandas中如何将<NA>转为NaN且保留其他值为整数?

Pandas实现整数与NaN共存的方法

核心结论

可以实现你要的整数与NaN共存的格式,但需要结合Pandas的类型特性选择合适的方法。

方法一:使用object类型存储(显示为NaN,值为整数)

直接将非NaN的浮点值转为整数,保留原有的np.nan,列类型变为object:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({'weights': [100.0, 100.0, 100.0, np.nan, np.nan, np.nan, 100.0]})

# 转换非NaN值为整数,保留NaN
df['weights'] = df['weights'].map(lambda x: int(x) if pd.notna(x) else x)

转换后结果:

weights
0    100
1    100
2    100
3    NaN
4    NaN
5    NaN
6    100
  • 优点:完全匹配你要的显示格式,非NaN值为整数类型,NaN保留原形式
  • 缺点:object类型列的运算效率低于原生数值类型,且可能混入其他类型数据(需谨慎操作)

方法二:保留Int64类型,修改缺失值显示为NaN

Pandas的Int64(大写I)是专门为整数+缺失值设计的Nullable Integer类型,用pd.NA表示缺失值,仅打印时显示为<NA>。若只是显示问题,可修改Pandas全局设置让pd.NA显示为NaN:

import pandas as pd
import numpy as np

df = pd.DataFrame({'weights': [100.0, 100.0, 100.0, np.nan, np.nan, np.nan, 100.0]})

# 转换为Int64类型
df['weights'] = df['weights'].astype('Int64')

# 修改缺失值显示为NaN
pd.options.display.na_rep = 'NaN'

此时查看结果:

weights
0    100
1    100
2    100
3    NaN
4    NaN
5    NaN
6    100
  • 优点:列类型是高效的Nullable Integer,运算性能好,不会出现类型混乱
  • 缺点:底层存储的缺失值是pd.NA而非np.nan,但两者在pd.isna()等缺失值判断逻辑中完全等价

为什么直接替换会变回浮点型?

np.nan本质是浮点类型,当你把pd.NA替换为np.nan时,Pandas会自动将整列类型提升为float64以容纳浮点类型的缺失值,导致原本的整数也转为浮点型。拆分合并操作同理,只要列中同时存在整数和np.nan,Pandas就会自动将列转为浮点类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:50:28