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

如何正确合并含不同时区时间列的Pandas DataFrame?

解决带时区的DataFrame合并匹配问题

问题核心是两个DataFrame的tsr列时区不同——哪怕它们代表同一绝对时刻,不同的时区标记也会让Pandas判定为不同值,导致merge时无法匹配。完全不需要转成字符串合并,统一两个时间列的时区才是正确做法。

解决步骤

1. 统一时区

把其中一个DataFrame的时间列转换为和另一个相同的时区,二选一即可:

  • 方案一:将df2的时间转为UTC时区(和df1一致)
import pandas as pd

# 转换df2的tsr到UTC时区
df2["tsr"] = df2["tsr"].dt.tz_convert("UTC")
# 基于统一后的tsr列合并
merged_df = pd.merge(df1, df2, on="tsr")
  • 方案二:将df1的时间转为Pacific/Auckland时区(和df2一致)
import pandas as pd

# 转换df1的tsr到Pacific/Auckland时区
df1["tsr"] = df1["tsr"].dt.tz_convert("Pacific/Auckland")
# 基于统一后的tsr列合并
merged_df = pd.merge(df1, df2, on="tsr")

2. 为什么不建议转字符串?

转字符串虽然可能临时解决匹配问题,但存在明显弊端:

  • 若时间字符串格式存在细微差异(比如时区显示格式不同),会直接导致匹配失败;
  • 丢失datetime类型的特性,后续无法直接进行时间加减、按时间段筛选等操作。

验证匹配结果

统一时区后,Pandas会正确识别同一绝对时刻的时间值,合并后就能得到你期望的对应关系:

2021-10-01 00:30:00+00:00   2021-10-01 00:30:00+13:00
2021-10-01 01:00:00+00:00   2021-10-01 01:00:00+13:00
2021-10-01 01:30:00+00:00   2021-10-01 01:30:00+13:00
2021-10-01 02:00:00+00:00   2021-10-01 02:00:00+13:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:25:33