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

Pandas转Parquet时Datetime列格式异常且值失真求助

解决Parquet保存后日期格式异常问题

问题现象

把CSV里的日期列(%Y-%m-%d格式,比如2011-01-29)转成datetime类型后,数据显示完全正常,但保存为Parquet文件后,日期却变成了43060-07-05.03:00:00.000这类异常的大年份格式。

可能原因

  1. 读取工具不兼容:直接用Excel这类不原生支持Parquet的工具打开文件时,Excel会把Parquet里存储的datetime二进制数据误判为Excel的日期序列号(以1900年为起始的日计数),进而转换出错误的大年份日期。
  2. 非标准工具读取时的解析错误:如果用了非pandas的工具读取Parquet,可能没有正确识别文件里的timestamp类型。

解决方案

1. 用正确工具验证Parquet文件内容

先通过pandas重新读取Parquet,确认数据本身是否真的异常:

import pandas as pd

# 读取Parquet文件
df_read = pd.read_parquet("merged1.parquet", engine="pyarrow")
# 检查日期列的类型和内容
print("日期列数据类型:", df_read["date"].dtype)
print("日期列前5行内容:")
print(df_read["date"].head())

如果输出的日期是正常的%Y-%m-%d格式,说明问题出在读取工具而非保存过程。

2. 确保保存时的datetime类型正确

转换日期列后,先确认它的类型是datetime64[ns](无需带时区):

# 转换后检查数据类型
print(df_merged_CA["date"].dtype)  # 正常输出应为 datetime64[ns]

确认类型正确后,直接保存即可,没必要额外添加时区(添加时区反而可能导致部分工具解析异常):

df_merged_CA.to_parquet("merged1.parquet", compression="gzip", engine="pyarrow")

3. 若需兼容Excel读取(可选)

如果必须用Excel查看日期,可以把datetime列转成字符串格式后再保存(但会丢失datetime类型的运算优势):

df_merged_CA["date_str"] = df_merged_CA["date"].dt.strftime("%Y-%m-%d")
df_merged_CA.to_parquet("merged1_with_str_date.parquet", compression="gzip", engine="pyarrow")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:35:21