python 剔除nan_从Python列表中删除nan值

这篇博客探讨了在Python中如何从列表和NumPy数组中移除NaN值的问题。作者提供了错误的示例代码,并解释了问题所在。解决方案是使用numpy.nan_to_num函数或列表推导式来替换NaN值为0.0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有人能看出为什么这不起作用?我试图从我的python List /数组中删除nan值.

import math

import numpy as np

def clean_List_nan(List):

Myarray=np.array(List)

x = float('nan')

for elem in Myarray:

if math.isnan(x):

x = 0.0

return Myarray

oldlist =[nan, 19523.3211203121, 19738.4276377355, 19654.8478302742, 119.636737571360, 19712.4329437810, nan, 20052.3645613346, 19846.4815936009, 20041.8676619438, 19921.8126944154, nan, 20030.5073635719]

print(clean_List_nan(oldlist))

解决方法:

您的函数中的控制流没有意义 – 您将变量x设置为nan,然后检查它是否确实在您的循环中为nan并将其设置为0.您永远不会触摸也不会检查数组的任何元素.

要将nan值正确转换为0,您可以简单地使用numpy.nan_to_num,因为您看起来正在使用NumPy数组.

演示

In[37]: arr

Out[37]:

array([ nan, 19523.32112031, 19738.42763774, 19654.84783027,

119.63673757, 19712.43294378, nan, 20052.36456133,

19846.4815936 , 20041.86766194, 19921.81269442, nan,

20030.50736357])

In[38]: np.nan_to_num(arr)

Out[38]:

array([ 0. , 19523.32112031, 19738.42763774, 19654.84783027,

119.63673757, 19712.43294378, 0. , 20052.36456133,

19846.4815936 , 20041.86766194, 19921.81269442, 0. ,

20030.50736357])

如果您对常规Python列表的方法的功能版本更感兴趣,您可以尝试这样的事情,或者像fafl提供的列表理解.

In[39]: list(map(lambda x: 0.0 if math.isnan(x) else x, oldlist))

Out[39]:

[0.0,

19523.3211203121,

19738.4276377355,

19654.8478302742,

119.63673757136,

19712.432943781,

0.0,

20052.3645613346,

19846.4815936009,

20041.8676619438,

19921.8126944154,

0.0,

20030.5073635719]

标签:python,arrays,nan,numpy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值