pandas中使用Timestamp.floor/ceil处理带时区时间戳时遭遇NonExistentTimeError的问题求助
pandas中使用Timestamp.floor/ceil处理带时区时间戳时遭遇NonExistentTimeError的问题求助
我最近在处理带时区的时间戳时碰到了个棘手的问题:尝试对美洲/圣地亚哥时区的时间戳按天做floor取整时,因为夏令时切换触发了NonExistentTimeError异常,具体情况如下:
>>> pd.Timestamp('2024-09-08 12:00:00-0300', tz='America/Santiago').floor("D") NonExistentTimeError: 2024-09-08 00:00:00
我清楚那天的午夜时间是不存在的——夏令时启动后,时钟从9月7日的23:59直接跳到了9月8日的01:00。但我原本预期floor方法会返回当天实际存在的最早时间,也就是pd.Timestamp('2024-09-08 01:00:00-0300', tz='America/Santiago')。
更糟的是,对前一天的时间戳做ceil按天取整时,也会遇到一模一样的异常:
>>> pd.Timestamp('2024-09-07 12:00:00-0300', tz='America/Santiago').ceil("D") NonExistentTimeError: 2024-09-08 00:00:00
我自己试了两种解决思路,但都没得到预期结果:
- 先取floor再本地化时区,还是会抛出相同异常:
>>> pd.Timestamp('2024-09-08 12:00:00').floor("D").tz_localize('America/Santiago') NonExistentTimeError: 2024-09-08 00:00:00
- 先取floor再转换时区,得到的结果完全不对:
>>> pd.Timestamp('2024-09-08 12:00:00-0300').floor("D").tz_convert('America/Santiago') Timestamp('2024-09-07 23:00:00-0400', tz='America/Santiago') # Wrong answer
有没有大佬能帮忙解决这个问题,让我能正确拿到按天取整后的有效时区时间戳呢?
备注:内容来源于stack exchange,提问作者edd313
相关产品推荐
相关产品推荐

