pyarrow.lib.ArrowInvalid: Casting from timestamp[us] to timestamp[ns] would result in out of bounds

1 篇文章 0 订阅
1 篇文章 0 订阅

项目场景:

从oracle读取数据后转为dataframe形式,然后通过to_feather()存入ft文件
之后通过pandas.read_feather()从文件中读取dataframe数据
数据类型包括date,并且有超出时间戳的数据,比如0002-12-01 00:00:00或9999-10-01 00:00:00

问题描述:

存入feather文件时正常,从ft文件读取时出错,错误如下
大概意思是从timestamp[us]强制转换为timestamp[ns]将导致时间戳越界
在这里插入图片描述

pyarrow.lib.ArrowInvalid: Casting from timestamp[us] to timestamp[ns] would result in out of bounds timestamp

原因分析:

就是date类型的某些数据超过了时间戳的界限

解决方案:

在网上实在搜不到能一眼看懂的解决方案,直到在pandas官网上一直死磕Representing out-of-bounds spans部分,发现了可行的解决方案:
pandas.PeriodIndex
pandas官网上的示例如下

In [413]: span = pd.period_range('1215-01-01', '1381-01-01', freq='D')

In [414]: span
Out[414]: 
PeriodIndex(['1215-01-01', '1215-01-02', '1215-01-03', '1215-01-04',
             '1215-01-05', '1215-01-06', '1215-01-07', '1215-01-08',
             '1215-01-09', '1215-01-10',
             ...
             '1380-12-23', '1380-12-24', '1380-12-25', '1380-12-26',
             '1380-12-27', '1380-12-28', '1380-12-29', '1380-12-30',
             '1380-12-31', '1381-01-01'],
            dtype='period[D]', length=60632, freq='D')

这不就是创了个区间的数据,实在没看懂怎么用PeriodIndex

之后直接去看PeriodIndex的用法,发现它的参数里有data,寻思直接调用PeriodIndex(data)把我dataframe里的越界数据调整一下?df['SWHZDJRQ'] = pd.PeriodIndex(df.SWHZDJRQ)(SWHZDJRQ是我dataframe里日期的列名)
然后报了个错?

ValueError: freq not specified and cannot be inferred

freq没指定,无法判断?那我就加上了freq参数,这个参数的介绍如下
fre:qstr or period object, optional. One of pandas period strings or corresponding objects.
大概是指定精度啥的,然后设为秒df['SWHZDJRQ'] = pd.PeriodIndex(df.SWHZDJRQ,freq='s')
一运行,诶,可以了,没啥错误了,也不报越界了,总算搞定了,折腾了一整天。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值