从lis中删除nan

2024-04-27 01:07:22 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图和熊猫一起做一个项目时,我遇到了一个问题。我有一个值为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]

Tags: 项目in列表datanotnanremovelist
3条回答

你所能做的只是得到一个干净的列表,在这个列表中,你不需要把那些一旦转换成字符串就变成“nan”的值。

代码是:

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

我认为您需要^{}来删除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]

如果所有值都是整数:

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

或者通过^{}选择所有非NaN值来删除NaN

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解决方案-slowier if bigDataFrame

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]

在这种情况下,有一种可能是提前删除nan,以避免在列表中执行此操作:

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

相关问题 更多 >