【发布时间】:2020-03-04 18:11:28
【问题描述】:
我正在尝试将一个表从一个 sql 服务器写入另一个。有一些日期值非常遥远(9000 年以上)。熊猫抛出错误:
OutOfBoundsDatetime:越界纳秒时间戳:9017-11-10 00:00:00
尝试在列上编写或执行 pd.to_datetime() 函数时。我宁愿在写入之前不将列转换为字符串,并希望有某种方法可以处理这么远的日期?
从我所做的谷歌搜索来看,熊猫似乎确实是故意这样做的。我不得不相信有一个替代方案,因为没有遥远日期的限制(特别是当数据库可以很好地处理它时)似乎非常重要。
【问题讨论】:
-
确实,pandas 原生地使用 np datetime 64 表示它的所有日期时间。我知道他们正在为 SAS (github.com/pandas-dev/pandas/issues/20927) 解决这个问题提供一些支持,但显然不是在 SQL 上。也许是一种解决方法:您可以使用普通的 SQLAlchemy,pandas 也在后台使用它。它将日期转换为 datetime.date(),它可以处理您的用例。
-
非常感谢@braml1。我能够将日期转换为标准日期时间值: df['Date'] = df['Date'].apply(lambda x:None if pd.isnull(x) else dt.date(x.year, x .month,x.day))。这确实迫使我的日期时间的所有时间分量都为 00:00:00.000 但幸运的是它们已经全部为零,因为日期时间实际上只是日期。