从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
相关产品推荐
相关产品推荐

