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

Python 如何在ddmmyyyy格式中将日期解释为3 12而不是31 2,python,pandas,date,datetime,strftime,Python,Pandas,Date,Datetime,Strftime,我的日期格式在一列中以11122020(ddmmyyyy)的格式出现 我用 转换为时间并按时间进行处理 最近,我的代码因日期312020而失败 ValueError: day is out of range for month python将其解释为312020,而不是导致错误的312020。任何人都有解决方案吗?一种方法是使用str.zfill确保日期为8位: s = pd.Series(["11122020", "3122020"]) pd.to_d

我的日期格式在一列中以
11122020
(ddmmyyyy)的格式出现

我用

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

最近,我的代码因日期312020而失败

ValueError: day is out of range for month

python将其解释为312020,而不是导致错误的312020。任何人都有解决方案吗?

一种方法是使用
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
,其中月份部分也需要标题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

现在,不管怎样,这都会有
'57020'
的问题。修改是很容易的。另一方面,这将/不应该是一个问题,否则
1112020
将是不明确的。@QuangHoang True。我要补充一点,“57020”也是我关心的问题。。幸运的是,他们发送的是零填充的月份。zfill对我的案子很有帮助。。谢谢你的帮助
    date
0   2020-12-11
1   2020-12-03
2   2020-07-05
3   NaT
4   2019-02-02
5   2019-11-03