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

使用df.to_json时丢失英国夏令时转换日(30 Mar 25)数据求助

问题原因

你遇到的是夏令时(DST)转换导致的物理时长与日历天不匹配问题:

  • 英国2025年3月30日切换夏令时,当天本地时间仅23小时(时钟从01:00直接拨快到02:00)。
  • 你用86400000ms(固定24小时物理时长)重采样,而非基于日历的天规则。这种情况下,pandas会从起始时间累加24小时生成采样窗口,跳过了实际的3月30日本地时间窗口,导致该日数据被合并到3月31日的窗口中。
  • DataFrame显示时可能因为时区渲染的问题看起来正常,但底层索引的时间戳已经偏移,转JSON时(默认按UTC或原始时间戳序列化)就会暴露数据错位。
解决方案

1. 确保时间戳带时区

先将原始毫秒时间戳转换为**带伦敦时区(Europe/London)**的datetime对象,避免无时区时间导致的混乱:

import pandas as pd

# 假设原始数据列名为'timestamp'和'value'
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms').dt.tz_localize('Europe/London')
df = df.set_index('timestamp')

2. 用日历天规则重采样

放弃固定毫秒数,使用pandas的日历天规则'D',它会严格按照本地日历的每一天划分窗口,自动适配夏令时的时长变化:

# 替换成你实际使用的聚合函数(比如sum、max等)
resampled_df = df.resample('D').mean()

3. 正确序列化JSON

转JSON时指定ISO日期格式,确保时区信息被正确保留,避免时间戳错位:

resampled_df.to_json('output.json', date_format='iso', orient='index')

验证结果

执行完上述步骤后,查看resampled_df.index,你会看到每个日期都是伦敦时区的当日起始时间(如2025-03-30 00:00:00+00:00),转JSON后3月30日的数据会正常显示,不会被合并到31日。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:38:08