2015-05-20 5 views
5

Ich habe eine Gaffy-Zeitreihe in einem Pandas-Dataframe mit einem Datetime-Index gespeichert. Ich möchte nun Lücken in den Zeitreihen identifizieren, um die kontinuierlichen Segmente zu identifizieren, um sie einzeln verarbeiten zu können (und in einigen Fällen Segmente mit kurz genug Lücken miteinander zu verbinden).Datenlücken finden (nicht füllen) in Pandas?

Es gibt zwei Hauptwege, die ich sehen kann, um dies zu tun. Die erste besteht in der Neuindizierung unter Verwendung verschiedener Ansätze, um eine regelmäßige Zeitreihe zu erhalten und die gefüllten NA-Werte in den Lückenbereichen zu beobachten. In meinem Fall führt das zu vielen zusätzlichen Zeilen (d. H. Einigen langen Lücken). Sie müssen dann noch einen zusätzlichen Schritt ausführen, um die fortlaufenden Segmente zu identifizieren.

Der andere Ansatz, und was ich derzeit verwende, ist, np.diff zu verwenden, um den Index zu unterscheiden und die Lücken mit np.where zu finden. Aber gibt es einen eher einheimischen Pandas Ansatz? Dies scheint eine ziemlich häufige Aufgabe zu sein. Ich stelle fest, es gibt Probleme mit np.diff und Pandas mit einigen Kombinationen von numpy und pandas Versionen, so dass eine Pandas einzige Lösung vorzuziehen wäre.

Was so etwas wie

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

für die Datenrahmen Daten wäre perfekt wäre.

+0

denke ich, könnte dies ein guter Ort, um zu starten: http://stackoverflow.com/questions/22290793/fill-na-values-in-pandas-series mit einem Stopp –

Antwort

3

Dies könnte für Sie arbeiten:

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 
Verwandte Themen