【问题标题】:How to remove nan's from list of lists? [duplicate]如何从列表中删除 nan? [复制]
【发布时间】:2019-06-18 20:20:46
【问题描述】:

我正在尝试从列表列表中删除所有 nans,我的数据如下:

[[1,2,3,nan,nan,nan],[4,5,nan],[9,8,7,6,5,4,3,nan,nan,nan,nan,nan]]

我已尝试从此处的答案 (How to delete [NaN] from a list of lists?) 中执行此操作:

import math
l = [[1,2,3,np.nan,np.nan,np.nan],[4,5,np.nan],[9,8,7,6,5,4,3,np.nan,np.nan,np.nan,np.nan,np.nan]]
[xs for xs in l if not any(math.isnan(x) for x in xs)]

但它会删除整个列表,而不仅仅是 nan 的

【问题讨论】:

  • 该答案的问题是它删除了列表,但没有删除列表中的 nans。事实上,这和我之前做过的一样

标签: python


【解决方案1】:

尝试遍历列表并使用 numpy 的 isnan 方法构建一个新列表。

import numpy as np
nan = np.nan
l = [[1,2,3,nan,nan,nan],[4,5,nan],[9,8,7,6,5,4,3, nan, nan, nan, nan, nan]]
[[x for x in y if not np.isnan(x)] for y in l]

【讨论】:

  • 如果您的环境没有安装 numpy,您也可以使用 math.isnan。
【解决方案2】:

没有numpy,使用math模块:

import math
nan = float('nan')
l = [[1,2,3,nan,nan,nan],[4,5,nan],[9,8,7,6,5,4,3,nan,nan,nan,nan,nan]]
l = [[j for j in i if not math.isnan(j)] for i in l]

print(l)

打印:

[[1, 2, 3], [4, 5], [9, 8, 7, 6, 5, 4, 3]]

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 2018-09-23
    • 2018-01-23
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多