熊猫:跑NaN洞的长度

Bja*_*ert 8 python pandas

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

因此,我想要一个函数来给我每个连续NaN序列的游程长度.我可以

myseries.isnull()
Run Code Online (Sandbox Code Playgroud)

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

也就是说,拥有一个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])
Run Code Online (Sandbox Code Playgroud)

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

从这一点,我会打洞长度和的直方图andor的isnull的多个系列(即可能是海誓山盟的替代品),以及其他好东西.

我还想了解其他方法来量化数据漏洞的"结块".

Wou*_*ire 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
Run Code Online (Sandbox Code Playgroud)

结果是

[1, 3, 2]
Run Code Online (Sandbox Code Playgroud)

  • `Series([len(list(g)) for k, g in groupby(a.isnull()) if k])` 可能效率更高一些。 (2认同)