どうもたぬきねこです!
今回は、PandasのDataFrameに文字列の日付データがある場合に、日付の範囲指定をして抽出する方法を紹介します。
環境
- python 3.6
- pandas 0.25.3
サンプルコード
手順としては、
- 文字列の日時をdatetime型に変換する
- 比較した時間のdatetimeを用意する
- 比較して抽出する
になります。
では、文字列日付データを比較して、抽出したりしてみましょう。
今回は以下のようなDataFrameを使います。
>>> df
値 日時
0 0.0 2020-06-26 18:49:11
1 - 2020-06-26 18:27:00
2 0.0 2020-06-26 18:15:22
3 - 2020-06-26 17:46:20
4 -5.1 2020-06-26 17:43:55
.. ... ...
445 - 2020-05-21 20:05:23
446 2.6 2020-05-21 18:44:36
447 - 2020-05-21 18:34:03
448 -2.2 2020-05-18 17:24:14
449 - 2020-05-18 17:18:31
1.文字列の日時をdatetime型に変換する
まず、日付の列をdatetime型に変換していきます。
>>> def convert_date(x):
... date = datetime.datetime.strptime(x,"%Y-%m-%d %H:%M:%S")
... return date
...
>>> df["日時"] = df["日時"].apply(convert_date)
>>> df
値 日時
0 0.0 2020-06-26 18:49:11
1 - 2020-06-26 18:27:00
2 0.0 2020-06-26 18:15:22
3 - 2020-06-26 17:46:20
4 -5.1 2020-06-26 17:43:55
.. ... ...
445 - 2020-05-21 20:05:23
446 2.6 2020-05-21 18:44:36
447 - 2020-05-21 18:34:03
448 -2.2 2020-05-18 17:24:14
449 - 2020-05-18 17:18:31
ここに関しては前回の記事で紹介していますので、説明は割愛します。
2.比較した時間のdatetimeの用意と実際に比較
指定した日時以降のデータの抽出
まずは、6月18日以降のデータを抽出してみます。ここでは、まず比較用のdatetimeを用意してから、比較しています。
>>> d = datetime.datetime(2020, 6, 18)
>>> df[df["日時"] > d]
値 日時
0 0.0 2020-06-26 18:49:11
1 - 2020-06-26 18:27:00
2 0.0 2020-06-26 18:15:22
3 - 2020-06-26 17:46:20
4 -5.1 2020-06-26 17:43:55
.. ... ...
99 - 2020-06-18 15:35:00
100 -10.2 2020-06-18 15:26:39
101 - 2020-06-18 14:28:52
102 -10.1 2020-06-18 08:40:43
103 - 2020-06-18 06:05:29
指定した日時以前のデータの抽出
6月18日以前のデータを抽出してみます。
>>> df[df["日時"] < d]
値 日時
104 3.5 2020-06-17 22:46:18
105 - 2020-06-17 17:02:03
106 6.8 2020-06-17 15:32:48
107 - 2020-06-17 13:41:08
108 10.0 2020-06-17 13:05:16
.. ... ...
445 - 2020-05-21 20:05:23
446 2.6 2020-05-21 18:44:36
447 - 2020-05-21 18:34:03
448 -2.2 2020-05-18 17:24:14
449 - 2020-05-18 17:18:31
指定した日時で範囲指定してデータの抽出
次に範囲指定をしてみます。
5月30日以降、6月18日以前のデータを取得してみます。
>>> d2 = datetime.datetime(2020, 5, 30)
>>> df[(df["日時"] < d) & (df["日時"] > d2)]
値 日時
104 3.5 2020-06-17 22:46:18
105 - 2020-06-17 17:02:03
106 6.8 2020-06-17 15:32:48
107 - 2020-06-17 13:41:08
108 10.0 2020-06-17 13:05:16
.. ... ...
257 - 2020-06-01 08:50:05
258 3.0 2020-06-01 08:41:43
259 - 2020-06-01 08:39:28
260 -0.4 2020-06-01 08:33:39
261 - 2020-06-01 08:14:07
おわりに
今回は、PandasのDataFrameに文字列の日付データがある場合に、日付の範囲指定をして抽出する方法を紹介しました。
Pandasだとデータ操作が楽で助かります。
また、いろいろ調べて紹介していきます。