如何以 ddmmyyyy 格式将日期解释为 3 12 而不是 31 2
how to make interpret date as 3 12 not 31 2 in ddmmyyyy format
我的日期格式在 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
我的日期格式在 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