【问题标题】:pandas to_datetime converts non-zero padded month and day into datetimepandas to_datetime 将非零填充月份和日期转换为日期时间
【发布时间】:2019-06-24 15:10:09
【问题描述】:

我正在使用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]

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

 DD0306 
 DD0706
 DD-83

将转换为

 1900-06-03
 1900-06-07
 NaT 

【问题讨论】:

标签: python python-3.x pandas datetime


【解决方案1】:

你需要寻找-并且只传递没有-的字符串。

设置:

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

【讨论】:

  • 但其他有效字符串如DD0306DD0706也转换为NaT
  • 我用df = pd.DataFrame(data={'id':['DD-83']})to_datetime(to_datetime( df['id'].loc[ ~df['id'].str.contains('-')].str.replace(r'\D+', ''), errors='coerce', format='%d%m'), errors='coerce', format='%d-%m', infer_datetime_format=True) 尝试了代码,但返回了一个空系列而不是NaT
  • @daiyue,查看完整的编辑答案。我也附上了设置。
猜你喜欢
  • 2019-06-18
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 2021-12-18
  • 2023-03-17
相关资源
最近更新 更多