2016-08-09 19 views
1

Wie parsen Sie Zeitdaten, wenn die Zeit im Format 2007-08-06T18:11:44.688Z ist, aber behandelt keine Millisekunden als 2007-08-06T18:11:44Z?Pandas - Parse Zeitdaten mit und ohne Millisekunden

pd.to_datetime(x.split('Z')[0], errors='coerce', format='%Y-%m-%dT%H:%M:%S.%f') zu entfernen entfernen die Zulu-Markierung fehlschlägt aufgrund der . manchmal fehlt.

pd.to_datetime(x.split('.')[0], errors='coerce', format='%Y-%m-%dT%H:%M:%S') zum Entfernen der Millisekunden fehlschlägt aufgrund der . manchmal fehlt.

pd.to_datetime(x.split('.|Z')[0], errors='coerce', format='%Y-%m-%dT%H:%M:%S') scheitert manchmal auch, obwohl es so aussieht, als sollte es sich in beiden Fällen teilen, wobei das 0-Element der Teil ist, den wir wollen, und somit immer eine gültige Zeit in Sekunden angibt.

+0

Das sehr umständlich' pd.to_datetime (x.split() [0] .split (' Z ') [0], Format =' % Y-% m- % dT% H:% M:% S ') scheint zu funktionieren, aber die Verdoppelung des Split-Vorgangs erhöht die Laufzeit. – Elliot

+0

in Pandas 0.18.1 'pd.to_datetime (pd.Series (['2007-08-06T18: 11: 44.688Z']))' gibt zurück: '0 2007-08-06 18: 11: 44.688',' dtype : datetime64 [ns] '. Welche Pandas Version benutzt du? – MaxU

+0

0.16.2 (aus Python x, y) – Elliot

Antwort

1

IIUC Sie einfach pd.to_datetime(df_column_or_series) ohne Angabe des format Parameter verwenden können, sollten sowohl Ihre Datums-Zeitformate

mit oder ohne einer Zulu Marker richtig analysieren, ändert nichts - Sie erhalten die gleiche dtype haben nach dem String umgewandelt zu pandas dtype Datumzeit: ‚. '

In [366]: pd.to_datetime(pd.Series(['2007-08-06T18:11:44.688Z'])).dtypes 
Out[366]: dtype('<M8[ns]') 

In [367]: pd.to_datetime(pd.Series(['2007-08-06T18:11:44.688'])).dtypes 
Out[367]: dtype('<M8[ns]') 

In [368]: pd.to_datetime(pd.Series(['2007-08-06T18:11:44'])).dtypes 
Out[368]: dtype('<M8[ns]') 

In [369]: pd.to_datetime(pd.Series(['2007-08-06'])).dtypes 
Out[369]: dtype('<M8[ns]') 

In [371]: pd.to_datetime(pd.Series(['2007-08-06T18:11:44.688']), format='%Y-%m-%dT%H:%M:%S.%f').dtypes 
Out[371]: dtype('<M8[ns]')