从列表中删除 nan - Python

Sco*_*tEU 6 python pandas

我试图从列表中删除 'nan',但它拒绝去。我已经尝试过 np.nan 和 'nan'。

这是我的代码:

ztt = []
for i in z:
    if i != 'nan':
        ztt.append(i) 
ztt
Run Code Online (Sandbox Code Playgroud)

或者:

ztt = []
for i in z:
    if i != np.nan:
        ztt.append(i) 
ztt
Run Code Online (Sandbox Code Playgroud)

我仍然得到输出:

[[46.0, 34.0, 32.0, 40.0, 34.0, 29.0, 38.0, 39.0, 45.0, 32.0, 28.0, 43.0],
 [32.0, 30.0, 67.0, 66.0, 28.0, 19.0, 39.0, 32.0, 51.0, 28.0, 20.0, 36.0],
 [29.0, 24.0, 37.0, 31.0, 32.0, 34.0, 28.0, 31.0, 28.0, 33.0, 28.0, 39.0],
 [27.0, 29.0, 35.0, nan, nan, nan, nan, nan, nan, nan, nan, nan]]
Run Code Online (Sandbox Code Playgroud)

有谁知道出了什么问题?

Daw*_*uba 5

for i in z:
    if not math.isnan(i):
        ztt.append(i)
Run Code Online (Sandbox Code Playgroud)

  • 它应该是`如果不是 math.isnan(i):`。此外,作为列表推导式:`[i for i in z if not math.isnan(i)]`。 (2认同)

jde*_*esa 3

ztt = []
for z_i in z:
    row = []
    for z_ij in z_i:
        if math.isnan(z_ij):
            row.append(z_ij)
        # If you want to replace with, for example, 0:
        # else:
        #     row.append(0)
    ztt.append(row)
Run Code Online (Sandbox Code Playgroud)

或者,使用嵌套列表理解:

ztt = [[z_ij for z_ij in zi if math.isnan(z_ij)] for z_i in z]
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你使用 NumPy,你可能可以这样做:

import numpy as np

ztt =[value[~np.isnan(value)] for value in z]
Run Code Online (Sandbox Code Playgroud)