让我们考虑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)
但是,如果我首先修改df
的时区,那么执行相同的reindex操作会产生一个完全填充NaNs值的DataFrame:
df = df.tz_localize("Europe/Helsinki").tz_convert('UTC')
df.reindex(date_range2)
任何人都知道这里发生了什么?
答案 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
正确方法:
默认情况下,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:~$