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

PyArrow写入CSV遇ArrowInvalid错误:UTC时区数据库缺失问询

解决PyArrow写入带时区Timestamp的CSV报错问题

问题场景

读取包含UTC时区时间戳的dates.csv文件后,使用PyArrow的csv.write_csv写入时,触发以下错误:

ArrowInvalid: Cannot locate timezone 'UTC': Timezone database not found at "C:\Users\user\Downloads\tzdata"

1. 解决时区数据库缺失问题

Windows下PyArrow当前硬编码了时区数据库路径到用户Downloads目录的tzdata文件夹,你需要在这里放置IANA时区数据库的文件:

  • 获取最新的IANA tzdata包(如tzdata.tar.gz)
  • 解压后,将包内zoneinfo目录下的所有文件(包括UTC、各类地区时区文件)复制到C:\Users\user\Downloads\tzdata目录中
  • 确保目录结构正确,PyArrow能找到对应时区的定义文件

2. 快速规避:移除Timestamp列的时区信息

如果不想手动配置时区数据库,直接把带时区的时间戳转换为无时区类型即可:

方法一:读取后转换类型

from pyarrow import csv, timestamp

# 读取原文件
t = csv.read_csv("dates.csv")
# 将dates列转换为无时区的timestamp[ns]
t_no_tz = t.set_column(0, "dates", t["dates"].cast(timestamp('ns')))
# 写入CSV
csv.write_csv(t_no_tz, "out.csv")

方法二:读取时指定无时区Schema

在读取阶段就强制指定列类型为无时区时间戳,避免PyArrow自动识别为时区类型:

from pyarrow import csv, schema, timestamp

# 定义自定义Schema,指定dates列为无时区timestamp
custom_schema = schema([("dates", timestamp('ns'))])
# 按Schema读取文件
t = csv.read_csv("dates.csv", schema=custom_schema)
# 写入CSV
csv.write_csv(t, "out.csv")

3. 关于PyArrow后续优化的说明

当前Windows版本的PyArrow存在时区数据库路径硬编码的问题,社区已经关注到该问题,后续版本大概率会优化这一点:比如随PyArrow安装包一起打包时区数据库,或者自动适配系统时区数据库路径,无需用户手动放置文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:35:25