You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效删除索引含NaN的行?以Pandas Series为例

解决Pandas Series中删除索引含NaN的行的高效方法

首先,你的当前方法确实能实现需求,但涉及多次索引重置和数据结构转换,效率不算最优。针对索引中存在NaN的场景,最直接高效的方式是利用索引的布尔过滤,直接保留索引不为NaN的行:

s = s[s.index.notna()]

为什么这个方法更好?

  • 它是一次向量式操作,不需要像reset_index().dropna().set_index('index').squeeze()那样反复在Series和DataFrame之间转换,数据量越大,性能优势越明显。
  • 代码简洁直观,一眼就能看懂是在过滤索引非空的行,可读性更强。

验证效果

用你的示例数据测试:

import pandas as pd
import numpy as np

s = pd.Series( np.array([0, 0, 1, 1, 2, 2]), index=np.array([ 0., 1., 2., 4., np.nan, 3.]) )
s = s[s.index.notna()]
print(s)

输出完全符合预期:

0.0    0
1.0    0
2.0    1
4.0    1
3.0    2
dtype: int64

补充:等价的drop写法

如果你更习惯用drop方法,也可以这样实现,效率和布尔过滤基本一致:

s = s.drop(s.index[s.index.isna()])

不过布尔索引的写法更简洁,推荐优先使用。

内容的提问来源于stack exchange,提问作者coldspeed95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:27:40