熊猫:跑NaN洞的长度

时间:2013-05-31 12:34:12

标签: python pandas

我有数百个时间序列对象,每个对象有100000个条目。 缺少一定比例的数据条目(NaN)。 对我的应用来说,重要的是它们是单个,分散的NaN还是长NaNs序列。

因此,我想要一个函数来给我每个连续NaN序列的游程长度。 我能做到

myseries.isnull()

得到一系列布尔。我可以移动中位数或移动平均线来了解数据漏洞的大小。 但是,如果有一个高效的方法来获取系列的长度列表,那就太好了。

即,拥有myfunc以便

会很高兴
a = pdSeries([1, 2, 3, np.nan, 4, np.nan, np.nan, np.nan, 5, np.nan, np.nan])
myfunc(a.isnull())
==> Series([1, 3, 2])

(因为分别有1个,3个和2个NaN)

由此,我可以制作孔长度的直方图,以及多个系列的isnull的andor的直方图(可能替代彼此),以及其他好东西。

我还想了解其他方法来量化数据漏洞的“结块”。

1 个答案:

答案 0 :(得分:8)

import pandas as pd
import numpy as np
import itertools

a = pd.Series([1, 2, 3, np.nan, 4, np.nan, np.nan, np.nan, 5, np.nan, np.nan])
len_holes = [len(list(g)) for k, g in itertools.groupby(a, lambda x: np.isnan(x)) if k]
print len_holes

结果

[1, 3, 2]