我有数百个时间序列对象,每个对象有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的and
或or
的直方图(可能替代彼此),以及其他好东西。
我还想了解其他方法来量化数据漏洞的“结块”。
答案 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]