Pandas如何将瑞典本地时间转UTC?解决NonExistentTimeError
解决Pandas中瑞典时区转UTC时的NonExistentTimeError问题
你遇到的错误是因为2022年3月27日是瑞典夏令时切换日:当地时间凌晨1点过后,时钟会直接跳到3点,所以2022-03-27 02:00:00这个时间在Europe/Stockholm时区里根本不存在,这才触发了NonExistentTimeError。
先纠正你代码里的笔误:pd.to_dataframe应该是pd.to_datetime,下面是不用删除时间戳的解决方法:
方法1:将不存在的时间向前偏移
把不存在的时间直接移到下一个存在的时间点(这里就是03:00),代码如下:
import pandas as pd # 转换为datetime类型 df['Time'] = pd.to_datetime(df['Time']) # 本地化时区并处理不存在的时间 df['Time'] = df['Time'].dt.tz_localize('Europe/Stockholm', nonexistent='shift_forward') # 转换为UTC时区 df['Time_UTC'] = df['Time'].dt.tz_convert('UTC')
处理后,原来的2022-03-27 02:00:00会被调整为2022-03-27 03:00:00+02:00,转成UTC就是2022-03-27 01:00:00+00:00。
方法2:将不存在的时间向后偏移
把不存在的时间移到上一个存在的时间点(这里就是01:00),只需修改nonexistent参数:
df['Time'] = df['Time'].dt.tz_localize('Europe/Stockholm', nonexistent='shift_backward')
此时2022-03-27 02:00:00会被调整为2022-03-27 01:00:00+01:00,转成UTC是2022-03-27 00:00:00+00:00。
方法3:自动推断合理时间
让Pandas根据前后时间戳自动推断最合适的时区偏移,调整不存在的时间:
df['Time'] = df['Time'].dt.tz_localize('Europe/Stockholm', nonexistent='infer')
这种方式会基于时间序列的连续性,给出最符合逻辑的调整结果。
以上三种方法都能保留所有数据,不需要删除任何时间戳,你可以根据业务需求选择合适的处理方式。
内容的提问来源于stack exchange,提问作者simber_codes
相关产品推荐
相关产品推荐

