【问题标题】:How to remove nan (float) item(s) from a list of mixed data types in python [duplicate]如何从python中的混合数据类型列表中删除nan(float)项目[重复]
【发布时间】: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 不适用于混合数据类型

标签: python


【解决方案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 是字符串时)
    猜你喜欢
    • 2021-12-22
    • 2011-09-29
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2021-06-14
    • 2019-11-19
    • 1970-01-01
    相关资源
    最近更新 更多