How can I convert a DataFrame column of strings (in dd/mm/yyyy format) to datetimes?
04 Answers
The easiest way is to use to_datetime:
df['col'] = pd.to_datetime(df['col']) It also offers a dayfirst argument for European times (but beware this isn't strict).
Here it is in action:
In [11]: pd.to_datetime(pd.Series(['05/23/2005'])) Out[11]: 0 2005-05-23 00:00:00 dtype: datetime64[ns] You can pass a specific format:
In [12]: pd.to_datetime(pd.Series(['05/23/2005']), format="%m/%d/%Y") Out[12]: 0 2005-05-23 dtype: datetime64[ns] 12If your date column is a string of the format '2017-01-01' you can use pandas astype to convert it to datetime.
df['date'] = df['date'].astype('datetime64[ns]') or use datetime64[D] if you want Day precision and not nanoseconds
print(type(df_launath['date'].iloc[0])) yields
<class 'pandas._libs.tslib.Timestamp'> the same as when you use pandas.to_datetime
You can try it with other formats then '%Y-%m-%d' but at least this works.
You can use the following if you want to specify tricky formats:
df['date_col'] = pd.to_datetime(df['date_col'], format='%d/%m/%Y') More details on format here:
If you have a mixture of formats in your date, don't forget to set infer_datetime_format=True to make life easier.
df['date'] = pd.to_datetime(df['date'], infer_datetime_format=True)
Source: pd.to_datetime
or if you want a customized approach:
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) 2