Pandasの日付・日時データの扱い方
Pandasは、データ分析においてよく使われるPythonのライブラリです。日付・日時データを扱う場合には、Pandasの機能をうまく使って、データの抽出や加工をすることができます。
日付データの抽出方法
まずは、日付データの抽出方法について説明します。Pandasでは、日付データを表すデータ型として、datetime64[ns]を使います。
import pandas as pd # 日付データの作成 date_data = pd.Series(['2022-01-01', '2022-01-02', '2022-01-03'], dtype='datetime64[ns]') print(date_data)
上記のコードでは、pd.Series()を使って、日付データを作成しています。dtype=’datetime64[ns]’と指定することで、日付データを表すデータ型として、datetime64[ns]が使用されます。
出力結果は以下の通りです。
0 2022-01-01 1 2022-01-02 2 2022-01-03 dtype: datetime64[ns]
次に、日付データから年月日などを抽出する方法について説明します。
# 年を抽出 print(date_data.dt.year) # 月を抽出 print(date_data.dt.month) # 日を抽出 print(date_data.dt.day)
上記のコードでは、dt.year、dt.month、dt.dayを使って、年月日などを抽出しています。
出力結果は以下の通りです。
0 2022 1 2022 2 2022 dtype: int64 0 1 1 1 2 1 dtype: int64 0 1 1 2 2 3 dtype: int64
日時データの抽出方法
日時データの抽出方法について説明します。日時データを表すデータ型として、datetime64[ns]を使います。
# 日時データの作成 datetime_data = pd.Series(['2022-01-01 00:00:00', '2022-01-02 12:00:00', '2022-01-03 23:59:59'], dtype='datetime64[ns]') print(datetime_data)
上記のコードでは、pd.Series()を使って、日時データを作成しています。dtype=’datetime64[ns]’と指定することで、日時データを表すデータ型として、datetime64[ns]が使用されます。
出力結果は以下の通りです。
0 2022-01-01 00:00:00 1 2022-01-02 12:00:00 2 2022-01-03 23:59:59 dtype: datetime64[ns]
次に、日時データから年月日時分秒などを抽出する方法について説明します。
# 年を抽出 print(datetime_data.dt.year) # 月を抽出 print(datetime_data.dt.month) # 日を抽出 print(datetime_data.dt.day) # 時を抽出 print(datetime_data.dt.hour) # 分を抽出 print(datetime_data.dt.minute) # 秒を抽出 print(datetime_data.dt.second)
上記のコードでは、dt.year、dt.month、dt.day、dt.hour、dt.minute、dt.secondを使って、年月日時分秒などを抽出しています。
出力結果は以下の通りです。
0 2022 1 2022 2 2022 dtype: int64 0 1 1 1 2 1 dtype: int64 0 1 1 2 2 3 dtype: int64 0 0 1 12 2 23 dtype: int64 0 0 1 0 2 59 dtype: int64 0 0 1 0 2 59 dtype: int64
時間データの抽出方法
時間データの抽出方法について説明します。Pandasでは、timedelta64[ns]を使って、時間データを表します。
# 時間データの作成 time_data = pd.Series(['00:00:00', '12:00:00', '23:59:59'], dtype='timedelta64[ns]') print(time_data)
上記のコードでは、pd.Series()を使って、時間データを作成しています。dtype=’timedelta64[ns]’と指定することで、時間データを表すデータ型として、timedelta64[ns]が使用されます。
出力結果は以下の通りです。
0 0 days 00:00:00 1 0 days 12:00:00 2 0 days 23:59:59 dtype: timedelta64[ns]
次に、時間データから時間、分、秒などを抽出する方法について説明します。
# 時間を抽出 print(time_data.dt.components['hours']) # 分を抽出 print(time_data.dt.components['minutes']) # 秒を抽出 print(time_data.dt.components['seconds'])
上記のコードでは、dt.componentsを使って、時間、分、秒などを抽出しています。
日付・日時データの時間操作テクニック
日付・日時データに対して、時間操作をする際に使える便利なテクニックを紹介します。
日付・日時データの加算・減算
日付・日時データに対して、加算・減算をすることができます。timedelta64[ns]を使って、加算・減算する値を指定します。
# 日付データの加算 print(date_data + pd.to_timedelta(1, 'D')) # 日時データの減算 print(datetime_data - pd.to_timedelta(1, 'h')) # 時間データの加算 print(time_data + pd.to_timedelta(1, 'h'))
上記のコードでは、pd.to_timedelta()を使って、加算・減算する値を指定しています。第1引数に加算・減算する値、第2引数に単位を指定します。
出力結果は以下の通りです。
0 2022-01-02 1 2022-01-03 2 2022-01-04 dtype: datetime64[ns] 0 2022-01-01 23:00:00 1 2022-01-02 11:00:00 2 2022-01-03 22:59:59 dtype: datetime64[ns] 0 0 days 01:00:00 1 0 days 13:00:00 2 1 days 22:59:59 dtype: timedelta64[ns]
日付・日時データの差分
日付・日時データの差分を求めることができます。timedelta64[ns]を使って、差分を求めます。
# 日付データの差分 print(date_data.diff()) # 日時データの差分 print(datetime_data.diff()) # 時間データの差分 print(time_data.diff())
出力結果は以下の通りです。
0 NaT 1 1 days 2 1 days dtype: timedelta64[ns] 0 NaT 1 1 days 12:00:00 2 1 days 11:59:59 dtype: timedelta64[ns] 0 NaT 1 12:00:00 2 11:59:59 dtype: timedelta64[ns]
日付・日時データの比較
日付・日時データを比較することができます。
# 日付データの比較 print(date_data > '2022-01-02') # 日時データの比較 print(datetime_data > '2022-01-02 12:00:00') # 時間データの比較 print(time_data > '12:00:00')
出力結果は以下の通りです。
0 False 1 False 2 True dtype: bool 0 False 1 False 2 True dtype: bool 0 False 1 False 2 True dtype: bool
よく使われる日付・日時データの処理パターン
最後に、よく使われる日付・日時データの処理パターンについて説明します。
日付・日時データのグループ化
日付・日時データをグループ化することができます。groupby()を使って、グループ化したい列を指定します。
# 日付データのグループ化 print(date_data.groupby(date_data.dt.month).count()) # 日時データのグループ化 print(datetime_data.groupby(datetime_data.dt.hour).count())
上記のコードでは、groupby()を使って、月ごとの日付データの件数、時ごとの日時データの件数を求めています。
出力結果は以下の通りです。
1 3 dtype: int64 0 1 12 1 23 1 dtype: int64
日付・日時データの変換
日付・日時データを変換することができます。to_datetime()を使って、文字列型の日付・日時データをdatetime64[ns]に変換します。
# 文字列型の日付データをdatetime64[ns]に変換 str_date_data = pd.Series(['2022/01/01', '2022/01/02', '2022/01/03']) date_data2 = pd.to_datetime(str_date_data, format='%Y/%m/%d') print(date_data2)
上記のコードでは、pd.to_datetime()を使って、文字列型の日付データをdatetime64[ns]に変換しています。
出力結果は以下の通りです。
0 2022-01-01 1 2022-01-02 2 2022-01-03 dtype: datetime64[ns]
まとめ
Pandasを使って、日付・日時データの抽出や時間操作をする方法について説明しました。日付・日時データに対して、加算・減算、差分、比較などの操作ができるため、データ分析や可視化において非常に便利です。