如何将CSV中分开的日期时间列转美东时区并拆分显示?
解决方案
核心思路:必须先合并date和time列生成完整的带时区时间戳,才能准确处理夏令时的时区转换,之后再拆分回独立的date和time列。
具体步骤与代码
import pandas as pd # 1. 合并date与time列,生成带EET时区的完整时间戳 # 将date转为字符串,和time拼接成完整时间字符串 df['full_datetime'] = pd.to_datetime(df['date'].astype(str) + ' ' + df['time']) # 给原始时间打上EET时区标签,ambiguous参数自动推断夏令时模糊时间 df['full_datetime'] = df['full_datetime'].dt.tz_localize('EET', ambiguous='infer') # 2. 将时间转换为美东时区(自动处理夏令时EDT/EST) df['full_datetime_est'] = df['full_datetime'].dt.tz_convert('America/New_York') # 3. 拆分回独立的date和time列 df['date'] = df['full_datetime_est'].dt.date # 得到美东时区对应的日期 df['time'] = df['full_datetime_est'].dt.strftime('%H:%M') # 得到格式化的美东时间(HH:MM) # 可选:清理中间生成的辅助列 df = df.drop(['full_datetime', 'full_datetime_est'], axis=1)
关键说明
- 单独处理
time列无法完成正确时区转换:夏令时偏移依赖具体日期,只有合并date和time后,才能让pandas准确判断是否应用夏令时规则。 - 避免手动计算时差:使用
America/New_York时区标识,pandas会自动切换EST(冬令时,与EET差7小时)和EDT(夏令时,与EET差6小时)的偏移。 - 纠正之前的错误操作:
- 不要直接给
time列用tz_localize,这会错误给时间打上无关时区标签,且无法关联日期做偏移。 dt.time只能提取原始时间,不会做时区转换,必须基于完整时区时间戳处理后再提取时间部分。
- 不要直接给
内容的提问来源于stack exchange,提问作者RichieGarafola
相关产品推荐
相关产品推荐

