2016-08-21 93 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]