Python ValueError:时间数据“02-01-2020”与格式“%d/%m/%y”不匹配(匹配)

Python ValueError: time data '02-01-2020' does not match format '%d/%m/%y' (match)

提问人:MRUNAL MUNOT 提问时间:9/11/2020 最后编辑:MRUNAL MUNOT 更新时间:1/9/2021 访问量:5521

问:

我正在处理用于机器学习的数据集,但我有一个不匹配的日期错误。我两次都尝试过不同的格式字符串,但它对我不起作用。我能做些什么来解决这个问题。由于数据集日期的格式不同,我该怎么办?"%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)
Python 熊猫 日期时间

评论

0赞 desertnaut 9/11/2020
这是一个和问题(添加标签),它与 or 无关 - 请不要向不相关的标签发送垃圾邮件(已删除)。pandasdatetimemachine-learningartificial-intelligence

答:

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

我能做些什么,因为数据集日期的格式不同?

  1. 修复数据源,使其返回连贯的数据
  2. 将中间规范化传递添加到管道以处理此问题
  3. 或按顺序尝试两种格式,例如
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
然后,您可以单独对每一行执行此操作,而不是批量执行此操作。