我有一个日期时间值列表,并希望将列表转换为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
...
我还阅读了关于Series和datetime的Pandas文档,并尝试了Pandas的时间戳,但仍然得到相同的结果。 Pandas版本为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)
我不知道你的Python版本有什么问题,但你可以而且应该使用矢量化(即更有效和更快)的pandas方法而不是vanilla 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
...
答案 1 :(得分:0)
Pandas有实用函数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]