如何不借助pandas将列表中不同类型的nan替换为类型匹配的-1000
解决方案
核心思路分为两步:首先用nan不等于自身的通用特性做类型兼容的nan判断,避免np.isnan()对非数值元素报错;其次按列表维度匹配非空元素的类型,保证替换值的类型和同列表其他元素统一。
具体实现代码
import numpy as np # 通用nan判断函数,兼容所有数据类型 def is_nan(x): return x != x dict_of_list = {"1": ["a", "b", np.nan, "z"], "2": [1, 4, 5, np.nan], "3": [60.0, np.nan, 40.0, 10.0]} for key, lst in dict_of_list.items(): # 提取当前列表的非nan元素,确定目标类型 non_nan_elements = [item for item in lst if not is_nan(item)] # 兼容全nan的极端情况,可自定义默认类型 target_type = type(non_nan_elements[0]) if non_nan_elements else int # 逐元素替换 dict_of_list[key] = [target_type(-1000) if is_nan(item) else item for item in lst] # 输出验证 print(dict_of_list)
运行后输出结果和你期望的完全一致:
{'1': ['a', 'b', '-1000', 'z'], '2': [1, 4, 5, -1000], '3': [60.0, -1000.0, 40.0, 10.0]}
方案说明
- 全程使用原生Python的列表、字典操作,没有转换为pandas结构,完全保留原生数据格式
- 不需要修改原有的数据遍历逻辑,仅替换了nan判断和类型适配逻辑,兼容性强
- 无论你使用的是
np.nan还是math.nan,该判断逻辑都可以正常生效
内容的提问来源于stack exchange,提问作者eng2019
相关产品推荐
相关产品推荐

