2015-05-20 1 views
5

Mam gappy czasseries przechowywane w parsie danych z datetimeindex. Chcę teraz zidentyfikować luki w przedziałach czasowych, aby zidentyfikować ciągłe segmenty, aby je przetworzyć osobno (aw niektórych przypadkach skleić ze sobą segmenty z wystarczająco krótkimi przerwami między nimi).Wykrywanie luki w danych (bez wypełniania) w pandach?

Są dwa główne sposoby, które mogę zobaczyć, aby to zrobić. Pierwszym z nich jest ponowne indeksowanie za pomocą różnych podejść, aby uzyskać regularne przedziały czasowe i obserwować wypełnione wartości NA w obszarach luk. W moim przypadku prowadzi to do wielu dodatkowych wierszy (to jest niektórych długich przerw). Następnie musisz wykonać dodatkowy krok, aby zidentyfikować ciągłe segmenty.

Innym podejściem, a obecnie używam, jest użycie np.diff, aby odróżnić indeks i znaleźć luki za pomocą np.where. Ale czy istnieje bardziej wrodzone podejście do pandy? Wydaje się to dość powszechnym zadaniem. Zauważam, że są problemy z np.df i pandami z pewnymi kombinacjami wersji numpy i pandy, więc rozwiązanie tylko pandas byłoby lepsze.

Jaki byłby idealny byłby coś

for segment in data.continuous_segments(): 
    # Process each segment 

dla danych dataframe.

+0

myślę, że to może być dobrym miejscem do rozpoczęcia: http://stackoverflow.com/questions/22290793/fill-na-values-in-pandas-series -z-przystankiem –

Odpowiedz

3

To może pracować dla Ciebie:

df = pd.DataFrame([["2015-01-01",1],["2015-01-02",1],[np.nan,1],[np.nan,1],["2015-01-10",1],["2015-01-11",1]], columns = ['timestamp','value']) 

continuous_segments = df[df.timestamp.notnull()].groupby(df.timestamp.isnull().cumsum()) 

for segment in continuous_segments: 
    print (segment[1]) 

    timestamp value 
0 2015-01-01  1 
1 2015-01-02  1 
    timestamp value 
4 2015-01-10  1 
5 2015-01-11  1