提问人:MRUNAL MUNOT 提问时间:9/11/2020 最后编辑:MRUNAL MUNOT 更新时间:1/9/2021 访问量:5521
Python ValueError:时间数据“02-01-2020”与格式“%d/%m/%y”不匹配(匹配)
Python ValueError: time data '02-01-2020' does not match format '%d/%m/%y' (match)
问:
我正在处理用于机器学习的数据集,但我有一个不匹配的日期错误。我两次都尝试过不同的格式字符串,但它对我不起作用。我能做些什么来解决这个问题。由于数据集日期的格式不同,我该怎么办?"%d-%m-%y"
"%d/%m/%y"
df_MR['Date'] = pd.to_datetime(df_MR['Date'], format = "%d-%m-%y")```
ValueError: time data '30/01/20' does not match format '%d-%m-%y' (match)
df_MR['Date'] = pd.to_datetime(df_MR['Date'], format = "%d/%m/%y")```
ValueError: time data '02-01-2020' does not match format '%d/%m/%y' (match)
答:
5赞
ApplePie
9/11/2020
#1
在一个小例子中,我成功地使用了 to_datetime 的infer_datetime_format参数:
>>> df = pd.DataFrame({'a': ['02-01-2020', '03-02-20', '03/02/2020', '04/05/2020']})
>>> pd.to_datetime(df['a'], infer_datetime_format=True)
0 2020-02-01
1 2020-03-02
2 2020-03-02
3 2020-04-05
Name: a, dtype: datetime64[ns]
0赞
Masklinn
9/11/2020
#2
我能做些什么,因为数据集日期的格式不同?
- 修复数据源,使其返回连贯的数据
- 将中间规范化传递添加到管道以处理此问题
- 或按顺序尝试两种格式,例如
try: # try to parse 4 digit years
df_MR['Date'] = pd.to_datetime(df_MR['Date'], format = "%d-%m-%Y")
except ValueError: # fallback to 2 digits year
df_MR['Date'] = pd.to_datetime(df_MR['Date'], format = "%d/%m/%y")
另一种选择是根本不以格式传递,并希望熊猫能做对。由于您的两种日期格式都不是按 DMY 顺序排列的,因此您可以尝试 .pd.to_datetime(dt, dayfirst=True)
评论
2赞
gold_cy
9/11/2020
不幸的是,如果格式混乱或不按特定顺序排列,这将不起作用
0赞
Masklinn
9/11/2020
我不知道你想说什么。只要它们是明确的,你当然可以尝试任意数量的格式字符串(尽管如果你有超过 2 个,你可能想循环)。如果他们模棱两可......没有帮助你。
0赞
gold_cy
9/11/2020
如果列的格式是,这将不起作用"%d-%m-%Y", "%d/%m/%y", "%d-%m-%Y"
0赞
Masklinn
9/11/2020
然后,您可以单独对每一行执行此操作,而不是批量执行此操作。
评论
pandas
datetime
machine-learning
artificial-intelligence