首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :在Timezone转换后重新索引DataFrame

Python :在Timezone转换后重新索引DataFrame
EN

Stack Overflow用户
提问于 2017-01-18 09:16:35
回答 1查看 459关注 0票数 3

让我们考虑一下1月16日上午10点到下午4点的DataFrame:

代码语言:javascript
复制
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点之间的时间范围:

代码语言:javascript
复制
date_range2 = pd.date_range(dt(2017,1,16,0), dt(2017,1,16, 23), freq='2H')
df.reindex(date_range2)

但是,如果我首先修改df的时区,然后执行相同的重新索引操作,则生成一个完全填充了NaNs值的DataFrame:

代码语言:javascript
复制
df = df.tz_localize("Europe/Helsinki").tz_convert('UTC')  
df.reindex(date_range2)

有人知道这里发生了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-18 10:29:17

Fix:

解决方法之一是在使用tz将时区信息转换为UTC时间之后,从时区感知( DateTimeIndex )中删除时区信息,以便将它们之间的差异(此处为UTC+02:00)添加到产生的时间戳中。

然后,它们将正确地重新编制索引。

代码语言:javascript
复制
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时间戳:

代码语言:javascript
复制
date_range2.tz = 'UTC'
df1 = df.tz_localize("Europe/Helsinki").tz_convert('UTC')
df1.reindex(date_range2)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41715376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档