You need to enable JavaScript to run this app. 从Python嵌套列表转numpy数组时如何保留NaN值不被转为字符串
优惠活动
大模型
产品
解决方案
定价
更多

从Python嵌套列表转numpy数组时如何保留NaN值不被转为字符串

问题原因

numpy的原生数组默认要求所有元素为同一数据类型,当嵌套列表中同时存在数值类元素(np.nan、整数19)和字符串类元素('a')时,numpy会自动将所有元素强制转换为统一的字符串类型,原本的浮点型np.nan会被转为字符串'nan',因此失去空值的独有特性。

解决方法

方案1:指定数组类型为object

创建数组时显式声明dtype=object,numpy会保留各元素原本的Python对象类型,不会做强制类型转换:

import numpy as np
nested_list = [[np.nan, 19], ['a', np.nan]]
arr = np.array(nested_list, dtype=object)

# 验证空值特性正常
print(arr[1][1] == arr[1][1])
# 输出:False

提示:object类型数组的数值运算效率低于同类型原生numpy数组,超大规模数据场景推荐使用下方结构化数组方案。

方案2:使用结构化数组适配多类型列

如果你的数据结构固定,每一列的类型统一(比如示例中第一列为字符串、第二列为数值),可以用结构化数组分别定义每列的类型,兼顾类型保留和运算效率:

# 定义每列的字段名和对应类型
arr_dtype = [('col1', 'U10'), ('col2', float)]
# 嵌套列表转元组列表适配结构化数组要求
arr = np.array([tuple(row) for row in nested_list], dtype=arr_dtype)

# 验证第二列的空值特性正常
print(arr['col2'][1] == arr['col2'][1])
# 输出:False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:30:04