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