Pandasを使った日付・日時データの抽出と時間操作テクニック

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を使って、日付・日時データの抽出や時間操作をする方法について説明しました。日付・日時データに対して、加算・減算、差分、比較などの操作ができるため、データ分析や可視化において非常に便利です。