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
相关产品推荐
相关产品推荐

