我一直在与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
答案 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'])