如何找到列表中除 NaN 之外的最后一个有效索引

How to find the last valid index in list except the NaN

我的最终目标是找到满足某些条件的有效列表。 我有几个 lits 有几个浮点数和 np.nan 值。 我喜欢 select 在某些范围内没有 nan 值的列表。

这是我的列表之一。

list = 
[          nan  -38.10940798  -52.15497422  -68.94011301 -112.58576732
 -110.27810095 -110.61354039 -131.82121921 -137.27076671 -134.34755197
 -125.4644195  -128.78669345 -134.30116567 -136.47002098 -142.14361377
 -142.86356029 -136.64266941 -128.34936325 -121.94468169 -131.72934853
 -135.34244008 -134.77085591 -137.3350188  -139.08824299 -140.45602586
 -143.47342506 -142.41400071 -139.16437999 -139.41824163 -141.88900778
 -142.26951505 -142.5739776  -142.6418401  -144.03415115 -142.03099862
 -141.96427292 -139.52750524 -137.56815712           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan]

所以,我想过滤掉这个列表,因为这个列表有从索引 -25 到索引 -1 的 nan

我试过了

if np.nansum(list[-25:-1]) == 0
    list = np.nan

我试过了

if np.nanmean(list[-25:-1]) == 0
    list = np.nan

两种情况均无效。

我有几个没有nan 和有nan 的列表。 所以,我想做的就是 1) select 具有精确范围内的 nan 的列表 2)并使该列表具有所有 nan

我看到您正在使用 NumPy,所以这是一种方法:

s = '''          nan  -38.10940798  -52.15497422  -68.94011301 -112.58576732
 -110.27810095 -110.61354039 -131.82121921 -137.27076671 -134.34755197
 -125.4644195  -128.78669345 -134.30116567 -136.47002098 -142.14361377
 -142.86356029 -136.64266941 -128.34936325 -121.94468169 -131.72934853
 -135.34244008 -134.77085591 -137.3350188  -139.08824299 -140.45602586
 -143.47342506 -142.41400071 -139.16437999 -139.41824163 -141.88900778
 -142.26951505 -142.5739776  -142.6418401  -144.03415115 -142.03099862
 -141.96427292 -139.52750524 -137.56815712           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan'''

a = np.fromstring(s, sep=' ')
if np.isnan(a[-25:-1]).all(): # check if all values in range are NaN
    a[:] = np.nan             # Set all values to NaN

要查找最后一个有效索引,您可以执行以下操作:

len(a) - (~np.isnan(a))[::-1].argmax()
# 38