【问题标题】:Pandas Out of Bounds timestamp work aroundPandas Out of Bounds 时间戳解决方法
【发布时间】: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 但幸运的是它们已经全部为零,因为日期时间实际上只是日期。

标签: python pandas


【解决方案1】:

上述函数通过将其设置为最大支持日期来处理越界

def date_include(dataframe):
    dataframe1=dataframe.str.split(" ", n = 1, expand = True)[0]
    dataframe2=dataframe.str.split(" ", n = 1, expand = True)[1]
    dataframe1=pd.to_numeric(dataframe1.str.replace('-',''),errors='coerce')
    dataframe1.loc[dataframe1>22620411]=22620411
    dataframe1=pd.to_datetime(dataframe1,format="%Y%m%d")
    date=dataframe1.astype(str)+" "+dataframe2
    return date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2016-05-12
    • 2021-05-07
    • 2020-09-24
    • 2021-10-18
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多