Используйте pd.to_datetime
с errors='ignore'
- Использовать только для столбцов
dtype == object
, используя select_dtypes
. Это предотвращает преобразование числовых столбцов в бессмысленные даты.
'ignore'
отказывается от попытки преобразования, если обнаружены какие-либо ошибки.
combine_first
используется вместо update
, поскольку update
сохраняет начальное значение dtypes
. Так как они были объектом, это все испортило бы.
df.select_dtypes(include=object).apply(pd.to_datetime, errors='ignore').combine_first(df)
date0 date1 feuxdate notadate
0 2019-01-01 NaT NaN NaN
1 NaT NaT 0.0 NaN
2 NaT NaT NaN hi
3 NaT 2019-02-01 NaN NaN
Могло бы быть хитрым с этим, используя assign
, чтобы справиться с dtypes
df.assign(**df.select_dtypes(include=object).apply(pd.to_datetime, errors='ignore'))
Настройка
dicts = [
{'date0': '2019-01-01'},
{'feuxdate': 0},
{'notadate': 'hi'},
{'date1': '20190201'}
]
df = pd.DataFrame.from_dict(dicts)