如何将pandas中的TimeSeries对象转换为整数?

时间:2013-02-28 11:34:51

标签: python pandas time-series

我一直在与Pandas一起计算特定灯具上运动员的年龄,尽管它是作为TimeSeries类型返回的。

我现在希望能够根据灯具日期绘制年龄(以天为单位),但无法确定如何将TimeSeries对象转换为整数。有人可以帮忙吗?

这是数据的形状。

squad_date['mean_age']
2008-08-16     11753 days, 0:00:00
2008-08-23     11760 days, 0:00:00
2008-08-30     11767 days, 0:00:00
2008-09-14     11782 days, 0:00:00
2008-09-20     11788 days, 0:00:00

这就是我想要的:

2008-08-16     11753
2008-08-23     11760
2008-08-30     11767
2008-09-14     11782
2008-09-20     11788

3 个答案:

答案 0 :(得分:4)

对于通过谷歌发现此帖子的人来说,如果你有numpy> = 0.7和pandas 0.11,这些解决方案将无效。什么工作:

squad_date['mean_age'].apply(lambda x: x / np.timedelta64(1,'D'))

官方的Pandas文档可能会令人困惑。他们建议做“x.item()”,其中x已经是timedelta对象。 x.item()将从timedelta对象中检索作为int值的差异。如果那是'ns',你会得到一个带有纳秒数的int。这样就可以得到一个整数除以时间误差的误差;将timedeltas直接相互划分确实有效(并将其转换为Days,如第二部分中的'D')。

我希望这将有助于将来的某个人!

答案 1 :(得分:2)

你需要掌握这个(0.11-dev)

In [40]: x = pd.date_range('20130101',periods=5)

In [41]: td = pd.Series(x,index=x)-pd.Timestamp('20130101')

In [43]: td
Out[43]: 
2013-01-01           00:00:00
2013-01-02   1 days, 00:00:00
2013-01-03   2 days, 00:00:00
2013-01-04   3 days, 00:00:00
2013-01-05   4 days, 00:00:00
Freq: D, Dtype: timedelta64[ns]

In [44]: td.apply(lambda x: x.item().days)
Out[44]: 
2013-01-01    0
2013-01-02    1
2013-01-03    2
2013-01-04    3
2013-01-05    4
Freq: D, Dtype: int64

答案 2 :(得分:0)

我这样做的方式:

def conv_delta_to_int (dt):
    return int(str(dt).split(" ")[0].replace (",", ""))

squad_date['mean_age'] = map(conv_delta_to_int, squad_date['mean_age'])