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

为何无法用Pandas的read_parquet函数读取Parquet文件?

解决Parquet读取时的Timestamp溢出错误并转CSV

错误原因

你遇到的ArrowInvalid错误是因为Parquet文件中存储的某个时间戳(32094334800000000微秒)转换为pandas默认的纳秒级时间戳时,超出了pandas支持的时间范围(pandas的Timestamp最大只能表示到2262年4月11日,而该微秒时间对应2987年,超出了上限)。

解决方案

下面提供三种可行的处理方式,帮你读取文件并转换为CSV:

方法1:用PyArrow读取并保留微秒时间单位

直接使用PyArrow库读取文件,避免自动转换为纳秒时间戳,再转成DataFrame保存为CSV:

import pyarrow.parquet as pq
import pandas as pd

# 读取Parquet文件
table = pq.read_table("fhv_tripdata_2018-05.parquet")
# 转换为DataFrame,保持原时间单位(微秒)
df = table.to_pandas(timestamp_as_object=False)
# 保存为CSV
df.to_csv("fhv_tripdata_2018-05.csv", index=False)

方法2:过滤超出范围的异常时间戳

如果你不需要异常的时间数据,可以先读取时转换为可处理的格式,再过滤掉超出范围的行:

import pandas as pd

# 读取文件时使用PyArrow引擎,指定dtype后端为PyArrow以支持更大时间范围
df = pd.read_parquet("fhv_tripdata_2018-05.parquet", engine="pyarrow", dtype_backend="pyarrow")

# 过滤掉超出pandas时间范围的行(假设异常时间在pickup_datetime和dropoff_datetime列)
valid_min = pd.Timestamp.min
valid_max = pd.Timestamp.max
df = df[(df["pickup_datetime"].between(valid_min, valid_max)) & 
        (df["dropoff_datetime"].between(valid_min, valid_max))]

# 保存为CSV
df.to_csv("fhv_tripdata_2018-05.csv", index=False)

方法3:强制将时间列转为字符串(简单粗暴)

如果不需要对时间列做计算,直接转成字符串读取:

import pandas as pd

# 读取时指定时间列为字符串类型
df = pd.read_parquet("fhv_tripdata_2018-05.parquet", 
                     dtype={"pickup_datetime": str, "dropoff_datetime": str})
# 保存为CSV
df.to_csv("fhv_tripdata_2018-05.csv", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:10:26