将dd/mm/yy正确转换为dd/mm/yyyy



使用panda将日期从dd/mm/yy转换为dd/mm/yyyy时遇到问题。

我试过这个:

df['Date'] = pd.to_datetime(df['Date'])

但不知何故,对于某些值,日期和月份正在交换。。。有其他方法可以正确转换吗?

提前感谢您回答我:(

短版本

您可以指定format,但这并不意味着不会因为两位数年份中固有的Y2K错误而出现任何问题

df['Date'] = pd.to_datetime(df['Date'],format='%d/%m/%y')

字符串'10/12/68'将被解析为2068年12月10日。

如果可能的话,让创建该值的人使用明确的ISO8601格式,即YYYY-MM-DD

详细说明

正确的方法是简单地不使用这样的字符串。连人类都猜不到xx/xx/xx的意思。12/5/12是什么意思?12月5日还是5月12日?1912年还是2012年?10/12/68怎么样?

这不是挑剔。即使现在,这样的错误仍然会造成严重的问题:

  • 西班牙家庭因阅读日期错误而被错误指控为儿童色情制品2020年9月
  • Y2K?2020年1月,劳埃德遭遇年度第二次TITSUP*,20万日元怎么样
  • Y2K快速修复蟋蟀?2020年1月,英国汽车牌照局出现神秘事件后,20世纪20年代卷土重来

真正的解决方案是将生成此类日期的应用程序修改为使用明确的YYYY-MM-DD格式,或者使用具有强类型日期的源。例如,Excel和几乎所有数据库都有日期类型。

解决方案

如果不可能,则需要使用format参数指定日期模式。

df['Date'] = pd.to_datetime(df['Date'],format='%d/%m/%y')

尽管如此,仍然有可能出现错误,因为两位数的年份将根据截止规则进行翻译。

例如,在这个SO问题中,'10/12/68'被解析为2068-12-10而不是1968:

>>> datetime.strptime('10/12/68', '%d/%m/%y')
datetime.datetime(2068, 12, 10, 0, 0)

Oops

相关内容

  • 没有找到相关文章

最新更新