2017-05-04 5 views
1

Sagen wir, ich habe einen Datenrahmen als:Python: Fehlende Datetime-Werte im Datenframe ausfüllen und vorwärts ausfüllen?

|  timestamp  | value | 
| ------------------- | ----- | 
| 01/01/2013 00:00:00 | 2.1 | 
| 01/01/2013 00:00:03 | 3.7 | 
| 01/01/2013 00:00:05 | 2.4 | 

Ich möchte die Datenrahmen haben, wie:

|  timestamp  | value | 
| ------------------- | ----- | 
| 01/01/2013 00:00:00 | 2.1 | 
| 01/01/2013 00:00:01 | 2.1 | 
| 01/01/2013 00:00:02 | 2.1 | 
| 01/01/2013 00:00:03 | 3.7 | 
| 01/01/2013 00:00:04 | 3.7 | 
| 01/01/2013 00:00:05 | 2.4 | 

Wie kann ich über diese gehen?

Antwort

2

Sie können resample mit ffill verwenden:

print (df.dtypes) 
timestamp  object 
value  float64 
dtype: object 

df['timestamp'] = pd.to_datetime(df['timestamp']) 

print (df.dtypes) 
timestamp datetime64[ns] 
value    float64 
dtype: object 

df = df.set_index('timestamp').resample('S').ffill() 
print (df) 
        value 
timestamp     
2013-01-01 00:00:00 2.1 
2013-01-01 00:00:01 2.1 
2013-01-01 00:00:02 2.1 
2013-01-01 00:00:03 3.7 
2013-01-01 00:00:04 3.7 
2013-01-01 00:00:05 2.4 

df = df.set_index('timestamp').resample('S').ffill().reset_index() 
print (df) 
      timestamp value 
0 2013-01-01 00:00:00 2.1 
1 2013-01-01 00:00:01 2.1 
2 2013-01-01 00:00:02 2.1 
3 2013-01-01 00:00:03 3.7 
4 2013-01-01 00:00:04 3.7 
5 2013-01-01 00:00:05 2.4 
+0

Sie mir sagen, warum Sie 'pd.to_datetime()' getan hat? ist der Zeitstempel nicht bereits im Datetime-Format? – aswa09

+0

Da resample nur mit 'datetime' und' 01/01/2013 00: 00: 00' arbeitet, ist nicht datetime, nur string repr von datetime – jezrael

+0

aber wenn du 'resample', wird der Timestamp zum Index, oder? Also würde ich die df.index.values ​​in eine Liste kopieren, es zu einer Spalte machen und dann neu indizieren? – aswa09