Pandas: corre la longitud de los agujeros de NaN

Tengo cientos de objetos de series de tiempo con 100000 de entradas en cada uno. Falta algún porcentaje de las entradas de datos (NaN). Es importante para mi aplicación si se trata de NaN individuales o dispersas o de secuencias largas de NaN.

Por lo tanto, me gustaría una función para darme la longitud de ejecución de cada secuencia contigua de NaN. puedo hacer

myseries.isnull() 

para obtener una serie de bool. Y puedo mover la mediana o la media móvil para tener una idea del tamaño de los agujeros de datos. Sin embargo, sería bueno si hubiera una forma eficiente de obtener una lista de longitudes de orificios para una serie.

Es decir, sería bueno tener un myfunc para que

 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]) 

(porque hay 1, 3 y 2 NaNs, respectivamente)

A partir de eso, puedo hacer histogtwigs de longitudes de orificios, y de and o or de nulo de series múltiples (que podrían ser sustitutos entre sí), y otras cosas agradables.

También me gustaría obtener ideas de otras formas de cuantificar la “aglomeración” de los agujeros de datos.

 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 

resultados en

 [1, 3, 2]