我的最终目标是找到满足某些条件的有效列表。 我有几盏灯,有几只浮点数和np.nan值。 我想选择在某个范围内没有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
我尝试过
if np.nansum(list[-25:-1]) == 0
list = np.nan
我尝试过
if np.nanmean(list[-25:-1]) == 0
list = np.nan
两种情况都不起作用。
我有几个没有nan的列表。 所以,我要做的就是 1)从精确范围中选择具有nan的列表 2)并使该列表具有全部nan
答案 0 :(得分:1)
我看到您正在使用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