Konvertieren Sie den DataFrame-Spaltentyp von Zeichenfolge in Datum / Uhrzeit im Format TT / MM / JJJJ

Antworten:

473

Der einfachste Weg ist zu verwenden to_datetime:

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

Es bietet auch ein dayfirstArgument für die europäische Zeit (aber Vorsicht, dies ist nicht streng ).

Hier ist es in Aktion:

In [11]: pd.to_datetime(pd.Series(['05/23/2005']))
Out[11]:
0   2005-05-23 00:00:00
dtype: datetime64[ns]

Sie können ein bestimmtes Format übergeben :

In [12]: pd.to_datetime(pd.Series(['05/23/2005']), format="%m/%d/%Y")
Out[12]:
0   2005-05-23
dtype: datetime64[ns]
Andy Hayden
quelle
danke für deine wiedergabe, kann ich das format definieren? wie '% d /% m /% Y'? sehr geschätzt
Perigäum
2
@ Shootingstars vielleicht Stackoverflow.com/questions/13703720/…
Andy Hayden
1
@shootingstars, die das Array übergeben, DatetimeIndex(df['col']).to_pydatetime()sollten funktionieren.
Andy Hayden
1
Nvm, ich habe zu früh kommentiert. Die Suche nach SettingWithCopyWarninggibt genug Material
Sundeep
2
@daneshjai doppelte Klammern erstellen einen DataFrame (mit nur einer Spalte) im Vergleich zu einfachen Klammern, bei denen die Spalte als Serie abgerufen wird.
Andy Hayden
36

Wenn Ihre Datumsspalte eine Zeichenfolge im Format '2017-01-01' ist, können Sie sie mit pandas astype in datetime konvertieren.

df['date'] = df['date'].astype('datetime64[ns]')

oder verwenden Sie datetime64 [D], wenn Sie Tagesgenauigkeit und keine Nanosekunden wünschen

print(type(df_launath['date'].iloc[0]))

ergibt

<class 'pandas._libs.tslib.Timestamp'> das gleiche wie bei Verwendung von pandas.to_datetime

Sie können es mit anderen Formaten als '% Y-% m-% d' versuchen, aber zumindest funktioniert dies.

sigurdb
quelle
2

Wenn Ihr Datum eine Mischung aus Formaten enthält, vergessen Sie nicht, diese festzulegen infer_datetime_format=True, um das Leben zu erleichtern

df['date'] = pd.to_datetime(df['date'], infer_datetime_format=True)

Quelle: pd.to_datetime

oder wenn Sie einen maßgeschneiderten Ansatz wünschen:

def autoconvert_datetime(value):
    formats = ['%m/%d/%Y', '%m-%d-%y']  # formats to try
    result_format = '%d-%m-%Y'  # output format
    for dt_format in formats:
        try:
            dt_obj = datetime.strptime(value, dt_format)
            return dt_obj.strftime(result_format)
        except Exception as e:  # throws exception when format doesn't match
            pass
    return value  # let it be if it doesn't match

df['date'] = df['date'].apply(autoconvert_datetime)
abhyudayasrinet
quelle