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

pandas导出Timestamp索引DataFrame为json后转换日期报OverflowError如何解决

问题根因

pandas的to_json方法默认会将Timestamp类型的索引转换为毫秒级Unix时间戳(13位整数),你转换报错的核心原因有两个:

  • datetime.datetime.fromtimestamp 仅接收秒级Unix时间戳(10位整数),传入13位毫秒值会因为数值范围远超C long类型上限,触发*OverflowError: Python int too large to convert to C long*报错
  • 直接调用pd.to_datetime时如果不指定单位,默认会按秒解析13位数值,得到超出合理时间范围的结果,甚至报错
可用解决方案

方案1:导出阶段直接规避时间戳格式问题

导出时指定date_format参数为iso,直接输出标准ISO格式的日期字符串,后续读回无需额外处理即可识别为时间类型:

# 导出时指定ISO日期格式
df.to_json("data.json", date_format="iso")
# 读回JSON时会自动识别日期格式
df_new = pd.read_json("data.json")

方案2:对已有的毫秒时间戳索引做转换

如果已经生成了带13位时间戳的JSON文件,读回后给pd.to_datetime指定unit='ms'参数即可完成转换,不需要手动做除法运算:

# 读回JSON文件
df_new = pd.read_json("data.json")
# 转换索引为Timestamp类型,指定单位为毫秒
df_new.index = pd.to_datetime(df_new.index, unit="ms")

方案3:单独转换单个毫秒时间戳

如果需要单独处理单个13位时间戳,先除以1000转换为秒级时间戳,再用datetime方法处理:

import datetime
ms_ts = 1629849600000
dt_obj = datetime.datetime.fromtimestamp(ms_ts / 1000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:57:04