让我们考虑一下1月16日上午10点到下午4点的DataFrame:
date_range1 = pd.date_range(dt(2017,1,16,10), dt(2017,1,16, 20), freq='2H')
df = pd.DataFrame(data = np.random.rand(len(date_range1),2), index = date_range1)我用一个稍长的DateTimeindex重新索引它,从上午0点到晚上11点,并获得所需的结果,在没有数据的情况下,NaNs会填充0-10点到4-11点之间的时间范围:
date_range2 = pd.date_range(dt(2017,1,16,0), dt(2017,1,16, 23), freq='2H')
df.reindex(date_range2)

但是,如果我首先修改df的时区,然后执行相同的重新索引操作,则生成一个完全填充了NaNs值的DataFrame:
df = df.tz_localize("Europe/Helsinki").tz_convert('UTC')
df.reindex(date_range2)

有人知道这里发生了什么吗?
发布于 2017-01-18 10:29:17
Fix:
解决方法之一是在使用tz将时区信息转换为UTC时间之后,从时区感知( DateTimeIndex )中删除时区信息,以便将它们之间的差异(此处为UTC+02:00)添加到产生的时间戳中。
然后,它们将正确地重新编制索引。
np.random.seed(42)
df1 = df.tz_localize("Europe/Helsinki").tz_convert('UTC').tz_localize(None)
df1.reindex(date_range2)

右进路:
默认情况下,tz关键字参数在pd.date_range中是None而不是"UTC"。我们需要相应地更改这一点,因为在重新索引的下面通过比较它们的UTC时间戳:
date_range2.tz = 'UTC'
df1 = df.tz_localize("Europe/Helsinki").tz_convert('UTC')
df1.reindex(date_range2)

https://stackoverflow.com/questions/41715376
复制相似问题