My table:
| ID | Start Date | End Date |
|---|---|---|
| 01 | 2022-11-14 00:00:00 | 2023-05-11 00:00:00 |
| 02 | 2022-11-14 00:00:00 | TBD |
| 03 | TBD | TBD |
| 04 | – | – |
The issue:
I would like to change the date format to '%d.%m.%Y' while keeping the string values.
Is there an efficient solution to this issue?
*Dates are currently in '%Y-%m-%d %H:%M:%S' by default
My attempt for one column:
df['Start Date'] = df['Start Date'].apply(lambda x: pd.to_datetime(x, errors='ignore'))
>Solution :
You can apply to_datetime and dt.strftime on the date columns, then fillna with the original data and update the DataFrame:
df.update(
df.filter(like='Date')
.apply(lambda s: pd.to_datetime(s, errors='coerce').dt.strftime('%d.%m.%Y'))
.fillna(df)
)
updated df:
ID Start Date End Date
0 1 14.11.2022 11.05.2023
1 2 14.11.2022 TBD
2 3 TBD TBD
3 4 - -