Colab大数据处理:取近2个月数据集遇Datetime时区偏移ValueError
解决方案:统一时区后再切片
直接用带不同时区偏移的字符串切片会触发ValueError,因为pandas要求切片边界的时区偏移一致。解决核心是把索引和切片边界的时间统一到同一个时区,以下是两种高效的处理方式,适合大数据量:
方式一:统一转换为UTC时区
先把切片的两个边界时间转成UTC,再用转换后的时间进行索引切片:
import pandas as pd # 转换起始、结束时间为UTC时区 start_time = pd.to_datetime('Sat 01 Oct 2022 12:00:03 AM BST').tz_convert('UTC') end_time = pd.to_datetime('Thu 01 Dec 2022 10:02:02 AM GMT').tz_convert('UTC') # 执行切片 latest_df = df.loc[start_time:end_time]
方式二:统一使用伦敦时区(Europe/London)
BST和GMT本质是伦敦时区的夏令时/冬令时切换,直接将索引和边界时间统一到该时区也能解决问题:
import pandas as pd # 先把DataFrame索引转换为Europe/London时区(如果还没设置的话) df.index = pd.to_datetime(df.index).tz_localize('Europe/London', ambiguous='infer') # 转换边界时间为伦敦时区 start_time = pd.to_datetime('Sat 01 Oct 2022 12:00:03 AM BST').tz_localize('Europe/London', ambiguous='infer') end_time = pd.to_datetime('Thu 01 Dec 2022 10:02:02 AM GMT').tz_localize('Europe/London', ambiguous='infer') # 执行切片 latest_df = df.loc[start_time:end_time]
关键说明
- 两种方式都不需要手动修改原始数据,处理速度远快于Excel,适合大数据场景
- 如果你的DataFrame索引还不是datetime类型,先执行
df.index = pd.to_datetime(df.index)转换后再处理时区
内容的提问来源于stack exchange,提问作者Wilson
相关产品推荐
相关产品推荐

