2012-11-28 10 views
12

Ich habe GPS-Daten der Eisgeschwindigkeit von drei verschiedenen GPS-Empfängern. Die Daten sind in einem Pandas-Datenrahmen mit einem Index des Julianischen Tages (inkrementell von Anfang 2009).Plot Pandas Datenrahmen mit NaNs

Dies ist eine Teilmenge der Daten ist (der Hauptdatensatz ist 3.487.235 Zeilen ...):

    R2   R7   R8 
1235.000000 116.321959 100.805197 96.519977 
1235.000116 NaN   100.771133 96.234957 
1235.000231 NaN   100.584559 97.249262 
1235.000347 118.823610 100.169055 96.777833 
1235.000463 NaN   99.753551 96.598350 
1235.000579 NaN   99.338048 95.283989 
1235.000694 113.995003 98.922544 95.154067 

Der Datenrahmen hat Form:

 
Index: 6071320 entries, 127.67291667 to 1338.51805556 
Data columns: 
R2 3487235 non-null values 
R7 3875864 non-null values 
R8 1092430 non-null values 
dtypes: float64(3) 

R2 mit einer anderen Rate zu R7 abgetastete und R8 folglich die NaNs, die systematisch in diesem Abstand erscheinen.

Der Versuch df.plot(), den gesamten Datenrahmen (oder indizierte Zeilenpositionen davon) zu plotten, funktioniert gut in Bezug auf die Auftragung von R7 und R8, aber zeichnet R2 nicht auf. In ähnlicher Weise funktioniert auch df.R2.plot() nicht. Die einzige Möglichkeit, R2 darzustellen, ist df.R2.dropna().plot(), aber dies entfernt auch NaNs, die Perioden ohne Daten bedeuten (und nicht nur eine gröbere Abtastfrequenz als die anderen Empfänger).

Hat sonst noch jemand das gefunden? Irgendwelche Ideen auf dem Problem würden dankbar empfangen werden :)

+0

Sie Ihre Zeit Schritte zu einem 'DatetiemIndex' umwandeln soll und als Resampling R2 – bmu

Antwort

9

Der Grund, den Sie nichts sehen, ist, weil der Standarddiagrammstil nur eine Zeile ist. Aber die Linie wird bei NaN unterbrochen, so dass nur mehrere aufeinanderfolgende Werte geplottet werden. Und Letzteres passiert in Ihrem Fall nicht. Sie müssen den Darstellungsstil ändern, der davon abhängt, was Sie sehen möchten.

Für den Anfang, versuchen Sie:

.plot(marker='o') 

, dass alle Datenpunkte erscheinen als Kreise machen sollte. Es wird leicht überladen, so dass die Anpassung von Markergröße, Edgecolor usw. nützlich sein kann. Im nicht vollständig eingestellt, wie Pandas verwendet matplotlib so oft ich schalten mich matplotlib wenn Plots komplizierter, zB:

plt.plot(df.R2.index.to_pydatetime(), df.R2, 'o-') 
+1

Dank Rutger, Das ist im Moment eine gute Lösung. Mein großer Grund, Pandas zu benutzen, besteht darin, alles im selben Sampling-Intervall neu zu indexieren, bevor Berechnungen wie die Kreuzkorrelation durchgeführt werden. Daher werde ich wahrscheinlich weiterhin das eigenständige Matplotlib für das Grundplotten verwenden. Vielen Dank. – ajt