如何移除字典内字符串数组的nan?解决Python标量转换报错
解决字典内数组移除NaN的问题
错误原因
你之前的代码错误在于直接对整个数组调用isnan()函数——不管是numpy.isnan还是math.isnan,都只能处理单个标量值,无法直接作用于数组,因此触发了仅尺寸为1的数组可转换为Python标量的错误。同时你的代码逻辑是过滤整个键值对,而非过滤数组内的NaN元素,和需求不符。
正确实现方法
假设你使用的是numpy数组,以下两种方法可以实现需求:
方法1:利用numpy数组的布尔索引
利用NaN不等于自身的特性(x != x仅对NaN成立),生成布尔索引过滤数组:
import numpy as np # 原始数据 sdg_keywords_dict = {'test1': np.array(['a','b','c','d','e','f',np.nan,'g '], dtype=object)} # 过滤数组内的NaN,生成新字典 test_dict = {key: values[values == values] for key, values in sdg_keywords_dict.items()}
方法2:转列表过滤后再转回数组
更直观的方式是先将数组转为列表,过滤掉NaN元素后再转回numpy数组:
import numpy as np sdg_keywords_dict = {'test1': np.array(['a','b','c','d','e','f',np.nan,'g '], dtype=object)} test_dict = {key: np.array([item for item in values if item is not np.nan]) for key, values in sdg_keywords_dict.items()}
验证结果
执行上述代码后,test_dict['test1']会得到:
array(['a', 'b', 'c', 'd', 'e', 'f', 'g '], dtype=object)
已成功移除数组内的NaN元素。
内容的提问来源于stack exchange,提问作者mangarapaul
相关产品推荐
相关产品推荐

