2

TimeSeries 型として返されますが、特定のフィクスチャでのスポーツマンの年齢を計算するために Pandas を使用してきました。

フィクスチャの日付に対して年齢 (日数) をプロットできるようにしたいのですが、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

Google でこの投稿を見つけた場合、numpy >= 0.7 で pandas 0.11 を使用している場合、これらのソリューションは機能しません。何が機能しますか:

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

公式の Pandas ドキュメントは、ここで混乱を招く可能性があります。彼らは、x がすでに timedelta オブジェクトである "x.item()" を実行することを提案しています。x.item() は、timedelta オブジェクトから int 値として差を取得します。それが「ns」の場合、たとえばナノ秒数の int を取得します。そのため、timedelta エラーによる整数除算が得られます。timedeltas を互いに直接分割することは機能します (そして、2 番目の部分の 'D' によってそれを Days に変換します)。

これが将来誰かに役立つことを願っています!

于 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 に答える