Python Pandas:时区转换后的Reindex DataFrame

时间:2017-01-18 09:16:36

标签: python pandas

让我们考虑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-10am到4-11pm之间没有数据:

date_range2 = pd.date_range(dt(2017,1,16,0), dt(2017,1,16, 23), freq='2H')
df.reindex(date_range2)

enter image description here

但是,如果我首先修改df的时区,那么执行相同的reindex操作会产生一个完全填充NaNs值的DataFrame:

df = df.tz_localize("Europe/Helsinki").tz_convert('UTC')  
df.reindex(date_range2)

enter image description here

任何人都知道这里发生了什么?

1 个答案:

答案 0 :(得分:3)

<强> 修正:

一种解决方法是在使用DateTimeIndex转换为UTC时间之后,从时区感知(tz_convert(None)UTC+02:00中删除时区信息,以便它们之间存在差异(此处, np.random.seed(42) df1 = df.tz_localize("Europe/Helsinki").tz_convert('UTC').tz_localize(None) df1.reindex(date_range2) )被添加到生成的时间戳中。

然后,这些将重新正确重新索引。

tz

enter image description here

正确方法:

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

exploit@exploit-desktop:~$ django-admin.py startproject hellodjango
bash: django-admin.py: command not found
exploit@exploit-desktop:~$ django-admin startproject mysite
bash: django-admin: command not found
exploit@exploit-desktop:~$ django-admin
bash: django-admin: command not found
exploit@exploit-desktop:~$ 

enter image description here