【问题标题】:ValueError: time data '27th August 2017 23:32:58' does not match format '%d-%m-%Y %H:%M:%S' (match)ValueError:时间数据“2017 年 8 月 27 日 23:32:58”与格式“%d-%m-%Y %H:%M:%S”不匹配(匹配)
【发布时间】:2018-02-14 22:09:23
【问题描述】:

我正在使用 pandas 和 odo 将 csv 文件导入数据库,文件中有一个日期字段,格式为 27th August 2017 23:06:25,我想转换为这种格式 %d-%m-%Y %H:%M:%S

这是我正在使用的一段代码:

df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y %H:%M:%S')

我最终得到了错误

ValueError: time data '27th August 2017 23:32:58' does not match format '%d-%m-%Y %H:%M:%S' (match)

有人有解决这个问题的想法吗?请

【问题讨论】:

  • 您为什么希望'27th August 2017' 适合'%d-%m-%Y' 的格式?它甚至没有接近。
  • @DeepSpace OP 声明“我想转换为这种格式”。所以他不知道这个格式是用来解析的。毕竟不是那么糟糕的问题,因为 pandas 能够解析没有任何格式的输入日期(我学到了一些东西)
  • 我相信 OP 尚未阅读有关日期时间格式如何工作的文档,因此他的期望是不正确的。这是:docs.python.org/2/library/…

标签: python python-2.7 pandas odo


【解决方案1】:

pandas 可以在没有格式说明符的情况下很好地解析:

In[25]:
pd.to_datetime('27th August 2017 23:32:58')

Out[25]: Timestamp('2017-08-27 23:32:58')

所以你不需要说明这个例子的格式

这里的另一点是,即使您尝试过类似的操作:

In[28]:
pd.to_datetime('27th August 2017 23:32:58', format='%dth %B %Y %H:%M:%S')

Out[28]: Timestamp('2017-08-27 23:32:58')

对于像这样的日期字符串,哪些工作会失败:

'3rd June 2011 12:11:23'

由于'rd',您无法使用to_datetime 传递格式来处理日期格式,请参阅python strptime 参考。你需要把它们去掉才能工作,但pandas 是男人/女人足以嗅出格式,所以没有必要

【讨论】:

  • 但是如果你确实指定了格式,请认识到 %m 是“08”而不是“August”!
  • @JohnZwinck 抱歉,你是在评论我还是这里的 OP?
  • 当然是给 OP。我知道你知道 %m 不是“八月”。
  • @JohnZwinck 当然,不用担心
猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 2022-01-20
  • 2021-10-11
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多