2016-08-03 15 views
3

Ich habe einen Datenrahmen mit Spalten von Datetime, lat, lon, z. Ich lese die Daten aus einer CSV-Datei ein, so dass der Zeitraum für die Datumsangaben nicht funktioniert. Die Zeiten sind in 6-Stunden-Intervallen, aber ich möchte die Daten linear in stündliche Intervalle interpolieren.Pandas Interpolieren Datenrahmen mit neuer Länge

Go von

 'A'    'B' 'C' 'D' 
0 2010-09-13 18:00:00 16.3 -78.5 1 
1 2010-09-14 00:00:00 16.6 -79.8 6 
2 2010-09-14 06:00:00 17.0 -81.1 12 

Um

 'A'    'B' 'C' 'D' 
1 2010-09-13 18:00:00 16.3 -78.5 1  
2 2010-09-13 19:00:00 16.35 -78.7 2 
3 2010-09-13 20:00:00 16.4 -78.9 3 
4 2010-09-13 21:00:00 16.45 -79.1 4 
5 2010-09-13 22:00:00 16.5 -79.3 5 
.... 

Ich habe versucht, den interpolieren Befehl, aber es gibt keine Argumente für eine neue Länge des Datenrahmens.

df.interpolate(method='linear') 

Ich dachte, dass ich .loc aufzunehmen 5 Reihen von Nans zwischen jeder Zeile in dem Datenrahmen und dann die Interpolation Funktion nutzen könnte, aber das scheint wie eine schlechte Abhilfe.

Lösung Die Verwendung von DatetimeIndex eliminiert die Zuordnung zu den anderen Spalten, wenn Ihre ursprüngliche Spalte nicht als datetime importiert wurde.

i = pd.DatetimeIndex(start=df['A'].min(), end=df['A'].max(), freq='H') 
df = df.reindex(i).interpolate() 
print(df) 

Gibt die richtige Antwort.

+0

Beispieldaten sind nur Datetime, lat, lon ... wo ist z? – piRSquared

Antwort

1
i = pd.DatetimeIndex(start=df.index.min(), end=df.index.max(), freq='H') 
df = df.reindex(i).interpolate() 
print(df) 

Ausgänge

2010-09-13 18:00:00 16.300000 -78.500000 
2010-09-13 19:00:00 16.350000 -78.716667 
2010-09-13 20:00:00 16.400000 -78.933333 
2010-09-13 21:00:00 16.450000 -79.150000 
2010-09-13 22:00:00 16.500000 -79.366667 
  1. Erstellen eines neuen Index mit der gewünschten Frequenz unter Verwendung DatetimeIndex (docs).

  2. reindex (docs) mit diesem neuen Index. Standardmäßig sind die Werte für neue Indizes np.nan.

  3. interpolate (docs), um diese fehlenden Werte auszufüllen. Sie können die method Kwarg angeben, um zu bestimmen, wie die Interpolation durchgeführt wird.

+0

Das funktioniert also unter der Annahme, dass das lat/lon den Datetime-Index hat. Aber was, wenn der ursprüngliche Index 1-3 ist und die Zeit in der ersten Spalte mit der Aufschrift "A" steht? – BenT

+0

Sie können 'set_index' ([docs] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.set_index.html)) verwenden, um diese Spalte als Index zu verwenden. – Alex