如何将pandas中的时间序列对象转换为整数?

2 投票
3 回答
6049 浏览
提问于 2025-04-17 17:26

我一直在使用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

撰写回答