如何从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)项目[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python:仅在列表末尾删除重复值

从 F# 中的列表中删除 nans

如何从 Pandas 数据框中删除行列表?

如何从 dtype 为列表的 Pandas 系列中删除 NaN?

从数据框中删除不包括一组列的列中的nan行。

数据库中的空值与NULL的区别以及python中的NaN和None