2012-11-28 43 views
12

Ho dati GPS della velocità del ghiaccio da tre diversi ricevitori GPS. I dati sono in un dataframe panda con un indice del giorno di Julian (incrementale dall'inizio del 2009).Plot pandas dataframe contenente NaN

Questo è un sottoinsieme dei dati (set di dati principale è 3487235 righe ...):

    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 

Il dataframe contiene forma:

 
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 campionato ad una frequenza diversa da R7 e R8 quindi i NaN che appaiono sistematicamente a quella spaziatura.

Tentare df.plot() per tracciare l'intero dataframe (o posizioni di riga indicizzate) funziona bene in termini di tracciare R7 e R8, ma non traccia R2. Allo stesso modo, fare semplicemente df.R2.plot() non funziona. L'unico modo per tracciare R2 è di fare df.R2.dropna().plot(), ma questo rimuove anche i NaN che indicano periodi di nessun dato (piuttosto che una frequenza di campionamento più grossolana rispetto agli altri ricevitori).

Qualcun altro ha incontrato questo? Tutte le idee sul problema saranno ricevute con piacere :)

+0

si dovrebbe convertire i passaggi di tempo per un 'DatetiemIndex' e di ricampionamento R2 – bmu

risposta

9

Il motivo per cui non vedi nulla è perché lo stile di trama predefinito è solo una linea. Ma la linea viene interrotta da NaN in modo che vengano tracciati solo più valori consecutivi. E quest'ultimo non si verifica nel tuo caso. È necessario modificare lo stile di stampa, che dipende da ciò che si desidera vedere.

Per cominciare, prova ad aggiungere:

.plot(marker='o') 

che dovrebbe rendere tutti i punti dati appaiono come cerchi. Può essere facilmente ingombrato, quindi la regolazione di markersize, edgecolor etc potrebbe essere utile. Im non corretto integralmente a come Panda sta usando matplotlib così ho spesso passare a me stesso se matplotlib trame diventano più complicate, ad esempio:

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

Grazie Rutger, questa è una buona soluzione per il momento. Il mio grande motivo per usare i panda sarà quello di ri-indicizzare tutto allo stesso intervallo di campionamento prima dei calcoli delle cose come la correlazione incrociata, quindi probabilmente continuerò a usare il matplotlib standalone per il tracciamento di base. Grazie. – ajt