首页 > 解决方案 > pandas to_datetime 将非零填充月份和日期转换为日期时间

问题描述

pd.to_datetime用来将字符串转换为datetime;

df = pd.DataFrame(data={'id':['DD-83']})
pd.to_datetime(df['id'].str.replace(r'\D+', ''), errors='coerce', format='%d%m')

%d%m定义了零填充的日期和月份,但代码仍然将上面的字符串转换为

0   1900-03-08
Name: id, dtype: datetime64[ns]

我想知道如何避免它被转换为日期时间(例如NaT在这种情况下转换为),如果字符串中的月份和日期不是 0 填充的。所以

 DD0306 
 DD0706
 DD-83

将转换为

 1900-06-03
 1900-06-07
 NaT 

标签: pythonpython-3.xpandasdatetime

解决方案


您需要查找-并仅传递不带-.

设置:

df = pd.DataFrame(data={'id':['DD-83', 'DD0706', 'DD0306']})

代码:

df['date'] = pd.to_datetime(df['id'].loc[~df['id'].str.contains('-')].str.replace(r'\D+', ''), errors='coerce', format='%d%m')

输出:

       id   date
0   DD-83   NaT
1   DD0706  1900-06-07
2   DD0306  1900-06-03

推荐阅读