2017-01-25 6 views
3

Ich bin sehr neu in Python und Codierung im Allgemeinen. Ich habe einige Daten in 1-Minuten-Intervallen, die möglicherweise einige Male fehlen. Ich möchte die fehlende Zeit und einen NaN-Wert für den entsprechenden Datenpunkt ausfüllen. Dies ist, was ich bis jetzt habe und es füllt NaN für alle Datenpunkte aus, anstatt nur die fehlenden.Fehlende Datenpunkte in Python

import pandas as pd 
df = pd.read_csv("data3.csv", index_col="DateTime") 
df = df.reindex(pd.date_range("11-1-2014 12:00:00", "11-1-2014 12:10:00", freq="1min"), fill_value="NaN") 
df.to_csv("test3.csv") 

File I

   NSERC_CB04_A0401 
DateTime       
11/1/2014 0:00   1.121889 
11/1/2014 0:01   1.121889 
11/1/2014 0:02   1.121889 
11/1/2014 0:03   1.121889 
11/1/2014 0:04   1.118503 
11/1/2014 0:05   1.121889 
11/1/2014 0:06   1.121889 
11/1/2014 0:07   1.121889 
11/1/2014 0:09   1.121889 
11/1/2014 0:10   1.121889 

File I schreibe

       NSERC_CB04_A0401 
2014-11-01 12:00:00    NaN 
2014-11-01 12:01:00    NaN 
2014-11-01 12:02:00    NaN 
2014-11-01 12:03:00    NaN 
2014-11-01 12:04:00    NaN 
2014-11-01 12:05:00    NaN 
2014-11-01 12:06:00    NaN 
2014-11-01 12:07:00    NaN 
2014-11-01 12:08:00    NaN 
2014-11-01 12:09:00    NaN 
2014-11-01 12:10:00    NaN 

lese, was ich will:

    NSERC_CB04_A0401 
    DateTime       
    11/1/2014 0:00   1.121889 
    11/1/2014 0:01   1.121889 
    11/1/2014 0:02   1.121889 
    11/1/2014 0:03   1.121889 
    11/1/2014 0:04   1.118503 
    11/1/2014 0:05   1.121889 
    11/1/2014 0:06   1.121889 
    11/1/2014 0:07   1.121889 
2014-11-01 12:08:00    NaN 
    11/1/2014 0:09   1.121889 
    11/1/2014 0:10   1.121889 

Antwort

4

Kein Problem, Sie sind neu in der Programmierung und in Python!

müssen Sie Parameter für convert index-DatetimIndex ersten parse_dates=True-read_csv hinzufügen und reindex dann - Startzeit 11-1-2014 12:00:00-11-1-2014 00:00:00 für den Abgleich geändert wird, ähnlich Endzeit.

Auch String NaN fehlt Wert nicht, Sie benötigen np.nan Was ist der Standardwert für fehlende Daten in reindex.

df = pd.read_csv("data3.csv", index_col="DateTime", parse_dates=True) 

df = df.reindex(pd.date_range("11-1-2014 00:00:00", "11-1-2014 00:10:00", freq="1min")) 
print (df) 
        NSERC_CB04_A0401 
2014-11-01 00:00:00   1.121889 
2014-11-01 00:01:00   1.121889 
2014-11-01 00:02:00   1.121889 
2014-11-01 00:03:00   1.121889 
2014-11-01 00:04:00   1.118503 
2014-11-01 00:05:00   1.121889 
2014-11-01 00:06:00   1.121889 
2014-11-01 00:07:00   1.121889 
2014-11-01 00:08:00    NaN 
2014-11-01 00:09:00   1.121889 
2014-11-01 00:10:00   1.121889 

Weitere allgemeine Lösung ist reindex von min und maxdatetime, aber es hängt von Ihren Daten:

df = df.reindex(pd.date_range(df.index.min(), df.index.max(), freq="1min")) 
print (df) 
        NSERC_CB04_A0401 
2014-11-01 00:00:00   1.121889 
2014-11-01 00:01:00   1.121889 
2014-11-01 00:02:00   1.121889 
2014-11-01 00:03:00   1.121889 
2014-11-01 00:04:00   1.118503 
2014-11-01 00:05:00   1.121889 
2014-11-01 00:06:00   1.121889 
2014-11-01 00:07:00   1.121889 
2014-11-01 00:08:00    NaN 
2014-11-01 00:09:00   1.121889 
2014-11-01 00:10:00   1.121889 

Wenn Duplikate in Index-Lösung sind resample mit einiger Aggregatfunktion wie mean, sum - auch se resample docs:

print (df) 
        NSERC_CB04_A0401 
DateTime        
2014-11-01 00:00:00   1.121889 
2014-11-01 00:01:00   1.121889 
2014-11-01 00:02:00   1.121889 
2014-11-01 00:03:00   1.121889 
2014-11-01 00:04:00   1.118503 
2014-11-01 00:05:00   1.121889 
2014-11-01 00:06:00   1.121889 
2014-11-01 00:07:00   1.121889 <- duplicates index 
2014-11-01 00:07:00   1.121889 <- duplicates index 
2014-11-01 00:09:00   1.121889 
2014-11-01 00:10:00   1.121889 

df = df.resample('1min').mean() 
print (df) 
        NSERC_CB04_A0401 
DateTime        
2014-11-01 00:00:00   1.121889 
2014-11-01 00:01:00   1.121889 
2014-11-01 00:02:00   1.121889 
2014-11-01 00:03:00   1.121889 
2014-11-01 00:04:00   1.118503 
2014-11-01 00:05:00   1.121889 
2014-11-01 00:06:00   1.121889 
2014-11-01 00:07:00   1.121889 
2014-11-01 00:08:00    NaN 
2014-11-01 00:09:00   1.121889 
2014-11-01 00:10:00   1.121889 
+0

Vielen Dank dass Arbeit s wenn ich nur die 2 Spalten habe. Wenn ich es für meinen Code mit 12 Spalten versuche, bekomme ich einen Fehler "ValueError: kann nicht von einer doppelten Achse neu indizieren" – acb

+0

Bitte überprüfen Sie die bearbeitete Antwort. – jezrael

+0

Vielen Dank nochmal sehr hilfreich. Eine letzte Frage: Wie würde ich np.nan verwenden, um in fehlenden Datenzeilen einen NaN-Wert anzugeben? Im Moment bekomme ich nur eine leere Reihe anstelle eines NaN. – acb

Verwandte Themen