我想了解pandas在添加到DataFrame时如何处理日期时间戳。在我的机器上,日期是提前4个小时存储的。我怎样才能阻止这一切的发生?
,
import pandas as pd
import datetime
test = pd.DataFrame({'A':['a','b','c'],'B':[1,2,3]})
test
Out[31]:
A B
0 a 1
1 b 2
2 c 3
dt = datetime.datetime(2016,10,4)
test['dt']=dt
test
Out[35]:
A B dt
0 a 1 2016-10-04
1 b 2 2016-10-04
2 c 3 2016-10-04
到目前为止都很好,但是当我把这个值看作一个数组时,我得到:
test.dt.unique()
Out[36]: array(['2016-10-03T20:00:00.000000000-0400'], dtype='datetime64[ns]')
我怎样才能保持这一点2016-10-04:…
我想维护它作为一个日期对象,并有它相同的,不管时区在哪里的代码正在运行?
在我发布这篇文章后的一个小时左右,我发现了一些东西。这不是理想的解决办法,但对我的目的有效。
首先,我找到了一些关于NumPy中缺乏naïve时区的讨论,以供参考:
https://mail.scipy.org/pipermail/numpy-discussion/2013-April/066038.html
注意:我使用的是NumPy 1.8.1和Pandas 0.14.0
对于我的目的,我只是将所有的东西都强制到午夜在机器的当地时区。
tz_adjust = np.timedelta64(int(-int(str(np.datetime64(datetime.datetime.now()))[-5:])/100),'h')
test['dt']=np.datetime64(dt) + tz_adjust
test
Out[75]:
A B dt
0 a 1 2016-10-04 04:00:00
1 b 2 2016-10-04 04:00:00
2 c 3 2016-10-04 04:00:00
test.dt.unique()
Out[76]: array(['2016-10-04T00:00:00.000000000-0400'], dtype='datetime64[ns]')
也可以看到@MaxU的第二条评论,转发到这里。
test['dt'] = pd.to_datetime('2016-10-04', utc=True)