yfinance返回的时间索引末尾的-04:00/-05:00后缀代表什么?
问题解答
1. 时间索引末尾-04:00/-05:00的含义
这两个是时区偏移标识,对应美股交易所在的美国东部时区的时令差异:
- -04:00代表美国东部夏令时(EDT),该时区时间比协调世界时(UTC)晚4小时,也就是UTC-4
- -05:00代表美国东部冬令时(EST),该时区时间比协调世界时(UTC)晚5小时,也就是UTC-5
示例中10月的时间用-04:00、11月的时间用-05:00,刚好对应美国每年3月到11月上旬实行夏令时、其余时间实行冬令时的规则,和美股交易时间的时区完全匹配。
2. 时间戳比较不相等的原因
你生成的pd.Timestamp(2021, 10, 25, 9,30)属于无时区信息的朴素时间戳(naive timestamp),而yfinance返回的Datetime索引是带时区信息的感知时间戳(aware timestamp),两类时间戳在pandas中默认无法直接等价比较,哪怕字面显示的时间数值完全一致,也会返回False。
解决方案
如果需要正常比较,统一两类时间戳的时区属性即可:
- 方法1:生成带对应时区的测试时间戳(更推荐,不会丢失原始信息)
test = pd.Timestamp(2021, 10, 25, 9,30, tz='America/New_York')
此时再和索引比较就会返回正确的布尔结果
- 方法2:把DataFrame的索引转为朴素时间戳(会丢失时区信息,非必要不推荐)
df.index = df.index.tz_localize(None)
内容的提问来源于stack exchange,提问作者Borut Flis
相关产品推荐
相关产品推荐

