从列表中删除一个NaN

18

在尝试使用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]
5个回答

25

我认为你需要使用dropna来去掉NaN值:

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 的值,使用 numpy.isnan 来移除 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 解决方案 - 如果数据量大则速度较慢 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']

你真的应该使用 math.isnan 而不是依赖于实现细节,比如 str(float("nan")) == "nan" - juanpa.arrivillaga

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不等于自身的事实来过滤掉NaN。

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)

你的回答可以使用额外的支持信息来改进。请[编辑]添加更多细节,例如引用或文档,以便他人可以确认您的答案是否正确。您可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接