如何以ddmmyyyy格式将日期解释为3 12而不是31 2

问题描述

我的日期格式在 pandas 列中采用格式 11122020 (ddmmyyyy)。

我用

datapdf["wholetime"]=pd.to_datetime(datapdf["wholetime"],format='%d%m%Y)  

转换为时间并按时间进行处理。

最近我的代码在日期 3122020 失败

ValueError: day is out of range for month

python 解释为 31 2 2020 而不是 3 12 2020 导致错误。有人对此有解决方案吗?

解决方法

一种方法是使用 str.zfill 来确保日期为 8 位数字:

s = pd.Series(["11122020","3122020"])
pd.to_datetime(s.str.zfill(8),format="%d%m%Y")

输出:

0   2020-12-11
1   2020-12-03
dtype: datetime64[ns]

请注意,此答案仅涉及当天缺少 0。它将无法解析更模糊的项目,例如 332020,其中 month 部分也需要标题 0。

,

使用 apply 的小新手方法我为日期创建了自定义解析器,如果您有其他格式,那么您可以调整该函数 w.r.t 您的日期格式,

import pandas as pd
data = {
    #assuming your dates are mix of ddmmyyyy,dmmyyyy,dmyyyy
    'date': ['11122020','3122020','572020','','222019','3112019']
}

df = pd.DataFrame(data)

def parser(elem):
  res = ''
  if len(elem) > 7:
    res = elem
  elif len(elem) > 6:
    d = '0' + elem[0]
    m = elem[1:3]
    y = elem[3:]
    res = d+m+y
  elif len(elem) > 5:
    d = '0' + elem[0]
    m = '0' + elem[1]
    y = elem[2:]
    res = d+m+y
  else:
    res = ''


  return pd.to_datetime(res,format='%d%m%Y',errors='coerce')

df['date'] = df['date'].apply(parser)
df

输出:

    date
0   2020-12-11
1   2020-12-03
2   2020-07-05
3   NaT
4   2019-02-02
5   2019-11-03