Python:データフレームでtimedeltaをintに変換します


111

timedelta列の日数の整数表現であるpandasデータフレームに列を作成したいと思います。「datetime.days」を使用することは可能ですか、それとも手動で何かする必要がありますか?

timedelta列

7日、23:29:00

日整数列

7


12
使ってみましたtimedelta.daysか?
Ffisegydd 2014

回答:


160

dt.days属性を使用します。この属性にアクセスするには:

timedelta_series.dt.days

secondsmicroseconds属性も同じ方法で取得できます。


11
私はこのコメントが簡単で、別のライブラリをインポートする必要がないので気に入っています。
NickBraunagel 2017

67

あなたはこれを行うことができます、tdあなたの一連のtimedeltaはどこですか?除算はナノ秒のデルタを日デルタに変換し、intへの変換は丸一日に低下します。

import numpy as np

(td / np.timedelta64(1, 'D')).astype(int)

1
ありがとう!また、15分以上検索した後、これを見つけました。stackoverflow.com/questions/18215317/...
アサフHanish

/の間のためにtdnp
Jason Goal

これは、timedelta64除算演算子です。tdを1日の時間デルタで除算すると、tdで表される(おそらく小数の)日数になります。この場合は必須ではありませんが、tdが表す15分間隔の数を計算したい場合に非常に便利です
David Waterworth

22

timedeltaオブジェクトは読み取り専用インスタンスの属性を持っている.days.seconds.microseconds


6

質問が「timedeltaの整数形式にアクセスする方法」だけではない場合は、しかし、「データフレームのtimedelta列をintに変換する方法は?」答えは少し異なるかもしれません。.dt.daysアクセサに加えて、df.astypeまたはのいずれかが必要ですpd.to_numeric

これらのオプションのいずれかが役立つはずです。

df['tdColumn'] = pd.to_numeric(df['tdColumn'].dt.days, downcast='integer')

または

df['tdColumn'] = df['tdColumn'].dt.days.astype('int16')

こんにちは、私はこれを試しましたが、ValueErrorが発生しました:パンダシリーズにnanがあるため、非有限値(NAまたはinf)を整数に変換できません。これを整理する人を知っていますか???
Pablito、

2番目のオプションは私にとってはうまくいき、日付の値はタイプtimedelta64[ns]でした。日付がNaNの場合、最初にpandas to_datetime関数を使用して日付時刻に変換し、次に上記の2番目のオプションを使用します。詳細のチェックアウトのためのto_datetime
Onenサイモン・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.