2016-05-10 16 views
2
df = pd.read_csv("data.csv", index_col = 'endDate', parse_dates = True) 

endDate in CSVIgnorieren der Zeitzonen Teil Datumszeitstempel pandas parse_dates

2016-05-06 15:01:01 -0400 

endDate Index für Datenrahmen in pandas nach dem Import

2016-05-06 19:01:01 

Wie ignorieren ich die -0400 Offset im CSV?

+0

Sie müssten nicht als Daten analysieren zunächst und Streifen die Zeitzoneninfo so 'df = pd.read_csv (" data.csv ", index_col = 'endDate')' und die n 'df.index = df.index.str.replace ('-0400', '')' und konvertieren mit 'to_datetime'' df.index = pd.to_datetime (df.index) 'sollte funktionieren. Ist der Zeitzonenwert gleich? – EdChum

Antwort

2

ich würde es auf diese Weise tun:

filename = '/path/to/file.csv' 
df = pd.read_csv(filename, index_col='endDate', parse_dates=['endDate'], 
       date_parser=lambda x: pd.to_datetime(x.rsplit(' ', 1)[0])) 

Test:

data = """\ 
endDate,val 
2016-05-06 15:01:01 -0400,11 
2016-05-06 20:20:20 -0100,12 
""" 

df = pd.read_csv(io.StringIO(data), index_col='endDate', parse_dates=['endDate'], 
       date_parser=lambda x: pd.to_datetime(x.rsplit(' ', 1)[0])) 

Ausgang:

In [119]: df = pd.read_csv(io.StringIO(data), index_col='endDate', parse_dates=['endDate'], 
    .....:     date_parser=lambda x: pd.to_datetime(x.rsplit(' ', 1)[0])) 

In [120]: df 
Out[120]: 
        val 
endDate 
2016-05-06 15:01:01 11 
2016-05-06 20:20:20 12 
+0

Wo würde ich den Pfad zur Datei data.csv in den Code einfügen? –

+0

@RyanPraskievicz, ich habe meine Antwort aktualisiert - 'pd.read_csv (Dateiname, ...)' – MaxU

3

Ich denke, das Beste, was hier ist nicht von Anfang an zu analysieren, so dass Sie sich der Zeitzone abzustreifen und dann konvertieren:

In [14]: 
t="""date 
2016-05-06 15:01:01 -0400""" 
df = pd.read_csv(io.StringIO(t),index_col=[0]) 
df.index = df.index.str.rsplit().str[0:-1].str.join(' ') 
df.index = pd.to_datetime(df.index) 
df 

Out[14]: 
Empty DataFrame 
Columns: [] 
Index: [2016-05-06 15:01:01] 

So, hier die Daten importieren als str so jetzt entfernen wir die Zeitzone str.rsplit mit und Dann schließe dich wieder an, aber ohne die Zeitzoneninfo. Wir können dann to_datetime verwenden, um zu datetime

+0

danke für den Kommentar, ich konnte es perfekt mit meinen Daten arbeiten. In Ihrer Antwort wo geht data.csv in den Code? –

1

zu konvertieren Sie können ein Listenverständnis zusammen mit str.split() verwenden.

df = pd.DataFrame({'endDate': ['2016-05-06 15:01:01 -0400', '2016-05-06 16:01:01 -0400']}) 

df['endDate'] = pd.to_datetime([date + " " + time 
           for date, time, _ in df.endDate.str.split()]) 

>>> df 
       endDate 
0 2016-05-06 15:01:01 
1 2016-05-06 16:01:01 
+0

Wenn ich meine csv-Datei 'df = pd.read_csv (" data.csv ")' (nicht das angegebene endDate) mit dem Code in Ihrer Antwort verwende, bekomme ich diesen Fehler: AttributeError: Kann nur den .str-Accessor mit String-Werten verwenden , die np.object_ dtype in Pandas verwenden. Wie kann ich das EndDate zu einer Zeichenfolge machen? –

+0

Parsen Sie die Daten nicht. – Alexander

Verwandte Themen