从列表中删除nan

מור*_*ניק 5 python nan

在尝试使用pandas进行项目时,我遇到了一个问题.我有一个包含nan值的列表,我无法将其删除.

我试过了:

incoms=data['int_income'].unique().tolist()
incoms.remove('nan')
Run Code Online (Sandbox Code Playgroud)

但它不起作用:

list.remove(x):x不在列表中"

清单incoms如下:

[75000.0, 50000.0, 0.0, 200000.0, 100000.0, 25000.0, nan, 10000.0, 175000.0, 150000.0, 125000.0]
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 11

我认为你需要dropna删除NaNs:

incoms=data['int_income'].dropna().unique().tolist()
print (incoms)
[75000.0, 50000.0, 0.0, 200000.0, 100000.0, 25000.0, 10000.0, 175000.0, 150000.0, 125000.0]
Run Code Online (Sandbox Code Playgroud)

如果所有值都只是整数:

incoms=data['int_income'].dropna().astype(int).unique().tolist()
print (incoms)
[75000, 50000, 0, 200000, 100000, 25000, 10000, 175000, 150000, 125000]
Run Code Online (Sandbox Code Playgroud)

或者NaN通过选择所有非NaN值来删除s numpy.isnan:

a = data['int_income'].unique()
incoms= a[~np.isnan(a)].tolist()
print (incoms)
[75000.0, 50000.0, 0.0, 200000.0, 100000.0, 25000.0, 10000.0, 175000.0, 150000.0, 125000.0]
Run Code Online (Sandbox Code Playgroud)
a = data['int_income'].unique()
incoms= a[~np.isnan(a)].astype(int).tolist()
print (incoms)
[75000, 50000, 0, 200000, 100000, 25000, 10000, 175000, 150000, 125000]
Run Code Online (Sandbox Code Playgroud)

纯python解决方案 - 如果大的话会更慢DataFrame:

incoms=[x for x in  list(set(data['int_income'])) if pd.notnull(x)]
print (incoms)
[0.0, 100000.0, 200000.0, 25000.0, 125000.0, 50000.0, 10000.0, 150000.0, 175000.0, 75000.0]
Run Code Online (Sandbox Code Playgroud)
incoms=[int(x) for x in  list(set(data['int_income'])) if pd.notnull(x)]
print (incoms)
[0, 100000, 200000, 25000, 125000, 50000, 10000, 150000, 175000, 75000]
Run Code Online (Sandbox Code Playgroud)


zou*_*a13 5

您所能做的就是简单地得到一个清理后的列表,在该列表中,您不必放置一旦转换为字符串即为“ nan”的值。

该代码将是:

incoms = [incom for incom in incoms if str(incom) != 'nan']
Run Code Online (Sandbox Code Playgroud)


Raf*_*ero 5

在这种特殊情况下的一种可能性是提前删除 nans 以避免在列表中执行它:

incoms=data['int_income'].dropna().unique().tolist()
Run Code Online (Sandbox Code Playgroud)