質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

884閲覧

【Python_データ分析】 timedeltaを用いたデータの可視化

Ryu_O_0802

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/24 13:27

前提・実現したいこと

Pythonのtimedeltaに関するデータの可視化について質問させていただきます。
timedeltaの型を持つデータを「day」単位で集計して、seabornのcoutplotなどで可視化したいと思っています。
具体的には、以下のdate_Cを日付単位でまとめ、カウントし、可視化したいです。

■■以下の2つの手法を試し、それぞれエラーが発生しました。
ケース①
timedeltaの型のまま可視化を試みました。
しかし、seabornの関数でうまく描画されませんでした。

ケース②
timedelta型のデータを全て秒数に置き換え、型をfloatにしました。
その結果、描画は実行されました。
しかし、秒数をdt.daysで日付単位に書き換える際に、以下のようなエラーが発生しました。

発生している問題・エラーメッセージ

'Series' object has no attribute 'days' 'DataFrame' object has no attribute 'days'

該当のソースコード

コード① data["date_A"] = pd.to_datetime(data["date_A"]) data["date_B"] = pd.to_datetime(data["date_B"]) data["date_C"] = data["date_B"] - data["date_A"] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~実行結果~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ data date_A date_B date_C 0 2021-04-14 22:41:00 2021-04-14 23:17:00 0 days 00:36:00 1 2021-04-14 18:22:00 2021-04-15 12:44:00 0 days 18:22:00 2 2021-04-14 16:37:00 2021-04-14 17:44:00 0 days 01:07:00 3 2021-04-13 14:09:00 2021-04-14 17:35:00 1 days 03:26:00 4 2021-04-13 13:30:00 2021-04-13 14:40:00 0 days 01:10:00 ... ... ... ... 8153 2018-01-06 15:32:00 2019-05-10 22:59:00 489 days 07:27:00 8154 2017-12-27 23:49:00 2019-04-01 03:23:00 459 days 03:34:00 8155 2017-12-06 17:21:00 2019-04-04 15:01:00 483 days 21:40:00 8156 2017-09-18 09:17:00 2020-09-18 13:55:00 1096 days 04:38:00 8157 2017-05-11 19:30:00 2019-01-27 10:57:00 625 days 15:27:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ コード② data.dtypes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~実行結果~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ date_A datetime64[ns] date_B datetime64[ns] date_C timedelta64[ns] dtype: object ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ コード③ data = data['date_C'].dt.total_seconds() data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~実行結果~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 2160.0 1 66120.0 2 4020.0 3 98760.0 4 4200.0 ... 8153 42276420.0 8154 39670440.0 8155 41809200.0 8156 94711080.0 8157 54055620.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ コード④ data.days() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~実行結果~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 'Series' object has no attribute 'days'

初歩的に質問で申し訳ありませんが、ご回答いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

秒数に変換したものはtimedeltaではないのでdays属性は持ちません。

timedeltaのままで、アクセサを使ってdays属性を見てください。

データは一部分ですが以下です。

python

1>>> data 2 date_A date_B 30 2021-04-14 22:41:00 2021-04-14 23:17:00 41 2021-04-14 18:22:00 2021-04-15 12:44:00 52 2021-04-14 16:37:00 2021-04-14 17:44:00 63 2021-04-13 14:09:00 2021-04-14 17:35:00 74 2021-04-13 13:30:00 2021-04-13 14:40:00 8>>> data["date_C"] = data["date_B"] - data["date_A"] 9>>> data['date_C'].dt.days 100 0 111 0 122 0 133 1 144 0 15Name: date_C, dtype: int64

投稿2021/04/24 14:37

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ryu_O_0802

2021/04/25 02:10

ありがとうございました! 上手くいきました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問