0

我试图了解 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-04T00: ...
我想将其作为日期对象进行维护,并且无论运行代码的时区如何,它都相同?

提前致谢。

4

2 回答 2

0

自从我发布这个后,我在一个小时左右发现了一些东西。这远非理想的解决方案,但可以满足我的目的。

首先,我发现了一些关于 NumPy 中缺乏幼稚时区的讨论以供参考:
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]')
于 2016-10-18T17:33:26.110 回答
0

另请参阅上面@MaxU 的第二条评论,在此处重新发布。

test['dt'] = pd.to_datetime('2016-10-04', utc=True) 
于 2016-10-18T18:59:12.340 回答