python - 如何在列表中找到除 NaN 之外的最后一个有效索引
问题描述
我的最终目标是找到满足某些条件的有效列表。我有几个具有多个 float 和 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]
所以,我喜欢过滤掉这个列表,因为这个列表的 nan 从索引 -25 到索引 -1
我试过了
if np.nansum(list[-25:-1]) == 0
list = np.nan
我试过了
if np.nanmean(list[-25:-1]) == 0
list = np.nan
两种情况都不起作用。
我有几个没有nan和有nan的列表。所以,我想要做的是 1)从确切范围中选择具有 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
推荐阅读
- reactjs - 在 reactjs 中显示菜单项后无法显示图标
- angular - 从角度请求 LinkedIn OAuth API 时出错
- python - PyQt5:使用不透明的小部件创建透明窗口
- python - 计算熊猫数据框中每一列中特定值的出现次数
- python - 使用python传输文件以执行脚本NiFi
- c++ - C++派生类在初始化之前调用基类上的方法
- javascript - 问题用 gui.remember() 记住嵌套对象
- javascript - Proactive MutationObserver - 在添加到 DOM 之前拦截节点
- javascript - 错误返回数据foreach查找mongodb数组
- java - 找不到命令:jdeprscan