基于日期范围更新Pandas DataFrame时间列及日期列的实现需求
处理Pandas DataFrame的GMT时间戳夏令时适配与日期调整
需求概述
已加载大文件并生成Pandas DataFrame,需完成两个核心操作:
- 夏令时适配:GMT时间戳冬季加7小时,夏季加6小时
- 日期调整:若调整后的时间晚于16:00,将
Creation_Date列日期加1天
解决方案1:基于时区自动判断夏令时(推荐)
利用Pandas时区处理功能自动识别夏令时,无需手动维护时间区间,准确性更高:
import pandas as pd def adjust_time_and_date(df, time_col='Confirmation_Time', date_col='Creation_Date'): # 转换时间列为UTC(GMT)标准datetime类型 df[time_col] = pd.to_datetime(df[time_col], utc=True) # 转换到目标时区(以美国山地时区为例,匹配冬加7、夏加6的需求) # 若你的目标时区不同,替换为对应时区字符串(如'Europe/London') local_time = df[time_col].dt.tz_convert('US/Mountain') # 根据夏令时状态调整GMT时间戳 df[time_col] = df[time_col] + pd.to_timedelta( local_time.dt.is_dst.map({True: 6, False: 7}), unit='h' ) # 处理Creation_Date:时间晚于16:00则日期加1天 df[date_col] = pd.to_datetime(df[date_col]) late_hour_mask = local_time.dt.hour > 16 df.loc[late_hour_mask, date_col] += pd.DateOffset(days=1) return df
代码说明
- 时区转换:通过
tz_convert将GMT时间转为目标时区,利用dt.is_dst自动识别夏令时状态 - 时间偏移:根据夏令时映射对应的小时偏移量,完成GMT到本地时间的转换
- 日期调整:基于转换后的本地时间判断是否需要加1天,避免时区偏移导致的判断误差
解决方案2:手动定义夏令时时间段
若无需依赖时区数据库,可手动指定夏令时的日期区间(示例为每年3-10月):
import pandas as pd def adjust_time_and_date(df, time_col='Confirmation_Time', date_col='Creation_Date'): # 转换时间列为datetime类型 df[time_col] = pd.to_datetime(df[time_col]) # 手动标记夏令时区间(可根据实际需求修改月份范围) is_dst = (df[time_col].dt.month >= 3) & (df[time_col].dt.month <= 10) # 调整GMT时间戳 df[time_col] = df[time_col] + pd.to_timedelta( is_dst.map({True: 6, False: 7}), unit='h' ) # 调整Creation_Date df[date_col] = pd.to_datetime(df[date_col]) late_hour_mask = df[time_col].dt.hour > 16 df.loc[late_hour_mask, date_col] += pd.DateOffset(days=1) return df
使用方式
直接传入你的DataFrame即可完成批量处理:
# 假设你的DataFrame名为df_processed df_processed = adjust_time_and_date(df)
内容的提问来源于stack exchange,提问作者Peter Ramstedt
相关产品推荐
相关产品推荐

