如何使Datetimeindex不是数据框中的索引

时间:2012-12-30 22:43:49

标签: python pandas

我希望能够访问Datetimeindex类提供的特殊方法,例如月,日等。但是我似乎无法将数据帧中的系列作为Datetimeindex,而不是使用它数据框的索引。请看以下示例:

dates

Out[119]:
         Dates
0     1/1/2012
1     1/2/2012
2     1/3/2012
3     1/4/2012
4     1/5/2012
5     1/6/2012
6     1/7/2012
7     1/8/2012
8     1/9/2012
9    1/10/2012
10  12/31/2012

date_series = pd.DatetimeIndex(dates.Dates)
date_series.month
Out[115]: array([ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 12])

dates.Dates = pd.DatetimeIndex(dates.Dates)
dates.Dates.month
AttributeError: 'Series' object has no attribute 'month'

我也尝试使用pd.to_datetime将系列转换为时间戳,但它仍然无效。

我知道我可以解决这个问题,但似乎这个功能应该存在吗?

2 个答案:

答案 0 :(得分:2)

更新:在0.15中,您可以访问类似datetime的方法的dt属性:

dates.Dates.dt.month

旧帖子(确实使用Wes'解决方案,而不是这个):

这是使用apply做的一个(慢!)解决方法,不理想,但有效:

In [11]: from pandas.lib import Timestamp

In [12]: df.Dates.apply(lambda x: Timestamp(x).month)
Out[12]: 
0      1
1      1
2      1
3      1
4      1
5      1
6      1
7      1
8      1
9      1
10    12
Name: Dates

这似乎是一个错误(你不能做apply(lambda x: x.month)),也许值得在github上添加一个问题。正如Wes所说:"welcome to hell"

答案 1 :(得分:2)

现在我建议做pd.DatetimeIndex(dates.Dates).month。我一直在争论是否要向Series添加一堆特定于数据类型的属性,这些属性只适用于时间戳,但尚未完成。