【Pandas】DataFrameの文字列日付データを比較して、抽出したりする

どうもたぬきねこです!

今回は、PandasのDataFrameに文字列の日付データがある場合に、日付の範囲指定をして抽出する方法を紹介します。

環境

  • python 3.6
  • pandas 0.25.3

サンプルコード

手順としては、

  1. 文字列の日時をdatetime型に変換する
  2. 比較した時間のdatetimeを用意する
  3. 比較して抽出する

になります。

では、文字列日付データを比較して、抽出したりしてみましょう。

今回は以下のような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だとデータ操作が楽で助かります。

また、いろいろ調べて紹介していきます。

タイトルとURLをコピーしました