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

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

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

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

1965閲覧

pandasのDateTimeIndex型のインデックスとなっているデータで、時刻のみ指定してデータを抽出方法

fox_cat

総合スコア8

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

1クリップ

投稿2019/10/23 09:01

前提・実現したいこと

pandasのDateTimeIndex型のインデックスとなっているデータで、時刻のみ指定してデータを抽出方法があれば、ご教授頂きたいです。

                  A B
TIME
2019-01-15 00:00:20.400 10 200
2019-01-15 00:01:22.400 6 2051
2019-01-15 00:03:24.400 10 5
2019-01-15 00:05:26.400 2 123
2019-01-15 00:08:28.400 11 1234
2019-01-15 01:10:30.400 7 1342
2019-01-15 02:00:32.400 10 61234

###出てほしい結果
時間指定をするだけで表示を行えるようにしたいです。
A B
TIME
2019-01-15 00:01:22.400 6 2051
2019-01-15 01:10:30.400 7 1342
2019-01-15 02:00:32.400 10 61234

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

data['2019-07-15 00:00:20']と指定の形式で表示を行うと表示されましたが、
data['2019-01-15 00:00:20','2019-01-15 01:10:30']と複数指定を行うと表示されませんでした。

試したこと

print(data.asfreq('H'))と指定して一時間ごとに表示するやり方や、
data['2019-01-15 00:00:20':'2019-01-15 01:10:30']で指定した区間のデータを表示する方法は分かりました。しかしながら、必要ないデータも出てくるので
複数選択を行うことで表示できる方法を知りたいです。

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

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

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

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

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

guest

回答2

0

残念ながら、DatetimeIndexをリストにて選択する場合は 文字列での指定はできないようですので、複数のIndexをリスト型で選択する場合は datetime型のリストを使ってください

Python

1ret = df.loc[[datetime(2019,1,15,0,0,20,400000), 2 datetime(2019,1,15,1,10,30,400000)]]

pandas.to_datetime()の戻り値でも大丈夫のようです

Python

1ret = df.loc[pd.to_datetime(['2019-01-15 00:00:20.400','2019-01-15 01:10:30.400'])]

ただしこの方法の場合は、文字列での選択のように日付だけの選択、時刻だけの選択、ミリ秒の省略などはできませんのでご注意ください。

時刻の一部だけ(時分のみなど)でフィルタリングする場合は、以下のように Datetime Accessor を使った条件文にて Boolean Listを生成して選択すると良いかと思います。

Python

1ret = df[ ((df.index.hour == 0) & (df.index.minute == 0)) | 2 ((df.index.hour == 1) & (df.index.minute == 10)) ]

投稿2019/10/24 00:09

magichan

総合スコア15898

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

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

fox_cat

2019/10/24 08:08

ありがとうございます。 Datetime Accessor は知らなかったので勉強になりました!
guest

0

ベストアンサー

data.loc[['2019-01-15 00:00:20', '2019-01-15 01:10:30']]でできませんか?


###追記
これでできると思います。

python

1import pandas as pd 2 3data.loc[pd.to_datetime(['2019-01-15 00:00:20.4', '2019-01-15 01:10:30.4'])]
  • 明示的にpd.to_datetimeで型をTimestampに変換しないといけない(自動で変換してくれると思っていましたがこの場合はしてくれないようです)
  • 秒以下の部分を省略してはいけない

もしかして、やりたいことと違ってきていましたらすいません。

投稿2019/10/23 09:29

編集2019/10/23 23:52
bsdfan

総合スコア4520

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

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

fox_cat

2019/10/23 15:46 編集

keyErrorがでて実行が出来ませんでした・・・ KeyError: "None of [Index(['2019-01-15 00:00:20', '2019-01-15 01:10:30'], dtype='object', name='TIME')] are in the [index]"
bsdfan

2019/10/23 23:53

間違っていたようですいません。回答に追記しました。
fox_cat

2019/10/24 08:06

ありがとうございます! 無事表示させることができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問