当NaNs包含在索引中时如何有效地回避?

时间:2018-01-14 10:51:28

标签: python performance pandas numpy

我有一个看起来像这样的系列:

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

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

你会注意到我要删除的索引中的NaN。删除该行的最有效方法是什么?

预期结果:

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

目前的做法:

s.reset_index().dropna().set_index('index').squeeze()

3 个答案:

答案 0 :(得分:3)

使用过滤:

print (s[s.index.notnull()])

或类似的:

print (s[~np.isnan(s.index)])

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

答案 1 :(得分:3)

In [22]: s[s.index.notna()]
Out[22]:
0.0    0
1.0    0
2.0    1
4.0    1
3.0    2
dtype: int32

答案 2 :(得分:2)

s[s.index.dropna()]

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