如何将pandas中的时间序列对象转换为整数?
我一直在使用Pandas来计算运动员在某个比赛时的年龄,不过结果是以时间序列的形式返回的。
现在我想把年龄(以天为单位)和比赛日期画成图,但我不知道怎么把时间序列对象转换成整数。接下来我该尝试什么呢?
这是数据的格式。
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
我这样做的:
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'])
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()会从这个时间差对象中提取出一个整数值。如果这个值是'ns',那么你会得到一个表示纳秒数量的整数。例如,这样做会导致一个整数除以时间差的错误;但直接将时间差相互除是可以的(并且会将结果转换为天数,因为第二部分的'D'表示天)。
希望这能在将来帮助到某个人!
2
你需要在主分支上进行这个操作(0.11开发版)
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