从列表中删除 nan

问题描述 投票:0回答:5

在尝试使用 pandas 进行项目时,我遇到了一个问题。我有一个包含

nan
值的列表,但我无法删除它。

我试过:

incoms=data['int_income'].unique().tolist()
incoms.remove('nan')

但是没用:

list.remove(x): x not in list"

名单

incoms
如下:

[75000.0, 50000.0, 0.0, 200000.0, 100000.0, 25000.0, nan, 10000.0, 175000.0, 150000.0, 125000.0]
python list nan
5个回答
25
投票

我认为你需要

dropna
删除
NaN
s:

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]

如果所有值都只是整数:

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

或通过

NaN
选择所有非NaN值来删除
numpy.isnan
s:

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]

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]

纯 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]

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]

19
投票

你能做的就是简单地得到一个干净的列表,你不把一旦转换为字符串的值放在 'nan' 中。

代码为:

incoms = [incom for incom in incoms if str(incom) != 'nan']

6
投票

在这种特殊情况下,一种可能性是更早地删除 nans 以避免在列表中这样做:

incoms=data['int_income'].dropna().unique().tolist()

0
投票

如果您到达此线程是为了从 Python 列表(而不是 pandas 数据帧)中删除 NaN,最简单的方法是过滤掉 NaN 的列表理解。

import math
new_list = [x for x in my_list if not (isinstance(x, float) and math.isnan(x))]

或者利用 NaN 不等于自身这一事实过滤掉 NaNs。

new_list = [x for x in my_list if x == x]

0
投票

只需将公式中的“nan”替换为 numpy.nan 即可。

import numpy
incoms=data['int_income'].unique().tolist()
incoms.remove(numpy.nan)
© www.soinside.com 2019 - 2024. All rights reserved.