You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyArrow 11.0.0读取Parquet时如何保留timestamp[us]避免越界错误?

解决PyArrow转Pandas时Timestamp单位转换溢出问题

错误原因

你遇到的ArrowInvalid错误,是因为Parquet文件中存储的timestamp[us]时间戳,在转成Pandas默认的datetime64[ns]类型时超出了范围。Pandas的datetime64[ns]依赖int64存储,能表示的时间上限是2262年,而你数据里的101999952000000000微秒对应3228年,转成纳秒后数值超出int64的存储范围,导致溢出报错。

解决方案

方案1:保留原生Timestamp单位转Pandas

在调用to_pandas()时传入use_pyarrow_extension_types=True参数,让Pandas保留PyArrow的原生时间类型(以扩展类型形式存在),避免强制转换为datetime64[ns]:

import pyarrow.parquet as pq
import pandas as pd

# 读取Parquet并保留原生时间类型
table = pq.read_table('/Users/abc/Downloads/LOAD.parquet').to_pandas(use_pyarrow_extension_types=True)

print(len(table))

处理后,DataFrame中的时间列会是pyarrow.TimestampType(unit='us')类型,既不会触发溢出,也能兼容大部分Pandas操作。

方案2:直接用PyArrow统计行数(更高效)

如果你的需求只是统计记录数,完全不需要转成Pandas,直接使用PyArrow Table的num_rows属性即可,跳过类型转换环节:

import pyarrow.parquet as pq

# 读取为PyArrow Table后直接统计行数
table = pq.read_table('/Users/abc/Downloads/LOAD.parquet')

print(table.num_rows)

这个方法不仅避免了类型转换问题,处理大文件时速度也会快很多。

内容的提问来源于stack exchange,提问作者Bill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:07:21