2

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

3 回答 3

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',你会得到一个整数,例如纳秒数。所以这将给出一个整数除以 timedelta 错误;将 timedeltas 直接除以彼此确实有效(并将其转换为 Days,如第二部分中的“D”)。

我希望这对将来的人有所帮助!

于 2013-07-18T12:53:10.860 回答
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
于 2013-03-01T00:03:53.273 回答
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'])
于 2013-02-28T12:33:41.440 回答