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]

danke für deine wiedergabe, kann ich das format definieren? wie '% d /% m /% Y'? sehr geschätzt
Perigäum


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.



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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.