如何从python中的混合数据类型列表中删除nan(float)项目[重复]
Posted
技术标签:
【中文标题】如何从python中的混合数据类型列表中删除nan(float)项目[重复]【英文标题】:How to remove nan (float) item(s) from a list of mixed data types in python [duplicate] 【发布时间】:2019-05-18 02:29:36 【问题描述】:我有一个混合数据类型的列表:
Z = ['a','b', float('NaN'), 'd']
我想删除 nan 观察结果。
我根据多个建议尝试了以下方法,但没有任何效果:
Z = [x for x in Z if x != 'nan']
Z = [x for x in Z if x != float('NaN')]
【问题讨论】:
math.isnan 不适用于混合数据类型 【参考方案1】:一个不错的技巧是Z = [x for x in Z if x == x]
这是有效的,因为 NaN 不等于它自己。
【讨论】:
没错,但最好使用math.isnan
,它就是为此而生的。
我得到的错误是 x 必须是一个实数而不是带有 math.isnan 的 str
可能还有其他情况 x 不等于自身,所以我更喜欢明确检查 NaN
在一个列表中混合几种不同类型的数据通常会导致麻烦。如果你坚持,你可以检查type(x) == float
,然后只做你的NaN测试。【参考方案2】:
你可以使用 numpy
import numpy as np
arr = np.array([0, 1, 2, 4, np.nan, 8, 3, np.nan, 6])
print(arr)
>>>[ 0. 1. 2. 4. nan 8. 3. nan 6.]
arr = arr[np.where(~np.isnan(arr))]
print(arr)
>>>[0. 1. 2. 4. 8. 3. 6.]
【讨论】:
【参考方案3】:使用 math.isnan
检查 NaN,如下所示:
Z = [x for x in Z if not math.isnan(x)]
【讨论】:
这不适用于混合数据类型(例如,当 x 是字符串时)以上是关于如何从python中的混合数据类型列表中删除nan(float)项目[重复]的主要内容,如果未能解决你的问题,请参考以下文章