2016-08-21 123 views
0

我有一個日期時間值的列表,並希望將列表轉換爲pandas.Series實例。該代碼可以歸結爲以下幾點:熊貓轉換日期時間值列表不正確

from datetime import datetime 
from datetime import timedelta 
from dateutil import parser 

day = parser.parse('2016-08-07T00:00:00Z') 
dates = [day + timedelta(days=delta) for delta in range(80)] 

pandas.Series(dates) 

令我百思不解的是,上面的代碼返回很多1970-01-01日期時間實例:

0 2016-08-07 00:00:00+00:00 
1 1970-01-01 00:00:00+00:00 
2 1970-01-01 00:00:00+00:00 
3 1970-01-01 00:00:00+00:00 
4 1970-01-01 00:00:00+00:00 
5 1970-01-01 00:00:00+00:00 
... 

但是,如果我轉換的任何子列表60元或更少,我能回到正確的系列:

from datetime import datetime 
from datetime import timedelta 
from dateutil import parser 

day = parser.parse('2016-08-07T00:00:00Z') 
dates = [day + timedelta(days=delta) for delta in range(80)] 

pandas.Series(dates[0:60]) 

注意最後一行,pandas.Series的輸入變得日期[0:60]。事實上,它可以是任何日期[N:N + 60],其中n爲0和len之間(日期) - 60.

0 2016-08-07 00:00:00+00:00 
1 2016-08-08 00:00:00+00:00 
2 2016-08-09 00:00:00+00:00 
3 2016-08-10 00:00:00+00:00 
4 2016-08-11 00:00:00+00:00 
5 2016-08-12 00:00:00+00:00 
... 

我還讀系列和日期時間的熊貓文件,並試圖熊貓'時間戳,但仍然有相同的結果。大熊貓的版本是0.18.1,並通過IPython的筆記本內核使用的Python版本是2.7.3:

print pandas.__version__ 

import sys 
print(sys.version) 

輸出是

0.18.1 
2.7.3 (default, Jun 22 2015, 19:33:41) 
[GCC 4.6.3] 

,我應該考慮到查找任何提示爲什麼會出現這個問題以及如何解決它?

感謝,

+0

我不能使用熊貓0.18.1與Python(3.5.1或2.7.11) – MaxU

+0

@MaxU奇怪的問題重現此問題。我的熊貓是0.18.1,Python版本是2.7.3。 –

回答

0

我不知道什麼地方錯了你的Python版本,但是你可以和應該使用矢量(即更有效,更快)大熊貓方法而不是香草Python方法:

In [181]: pd.Series([pd.to_datetime('2016-08-07T00:00:00Z') + pd.Timedelta(days=delta) for delta in range(80)]) 
Out[181]: 
0 2016-08-07 
1 2016-08-08 
2 2016-08-09 
3 2016-08-10 
4 2016-08-11 
5 2016-08-12 
6 2016-08-13 
7 2016-08-14 
8 2016-08-15 
9 2016-08-16 
10 2016-08-17 
11 2016-08-18 
12 2016-08-19 
13 2016-08-20 
14 2016-08-21 
15 2016-08-22 
16 2016-08-23 
17 2016-08-24 
18 2016-08-25 
19 2016-08-26 
20 2016-08-27 
21 2016-08-28 
22 2016-08-29 
23 2016-08-30 
24 2016-08-31 
25 2016-09-01 
26 2016-09-02 
27 2016-09-03 
28 2016-09-04 
29 2016-09-05 
     ... 
0

大熊貓具有實用功能pd.date_range產生這種對象:

import pandas as pd 

pd.Series(pd.date_range(start='2016-08-07T00:00:00Z', periods=80, freq='D')) 

輸出:

0 2016-08-07 00:00:00+00:00 
1 2016-08-08 00:00:00+00:00 
2 2016-08-09 00:00:00+00:00 
3 2016-08-10 00:00:00+00:00 
4 2016-08-11 00:00:00+00:00 
5 2016-08-12 00:00:00+00:00 
6 2016-08-13 00:00:00+00:00 
7 2016-08-14 00:00:00+00:00 
8 2016-08-15 00:00:00+00:00 
9 2016-08-16 00:00:00+00:00 
       ...   
70 2016-10-16 00:00:00+00:00 
71 2016-10-17 00:00:00+00:00 
72 2016-10-18 00:00:00+00:00 
73 2016-10-19 00:00:00+00:00 
74 2016-10-20 00:00:00+00:00 
75 2016-10-21 00:00:00+00:00 
76 2016-10-22 00:00:00+00:00 
77 2016-10-23 00:00:00+00:00 
78 2016-10-24 00:00:00+00:00 
79 2016-10-25 00:00:00+00:00 
dtype: datetime64[ns, UTC]