pandas

【pandas】DataFrameで日付・時間の列を処理する方法 ~to_datetime~

【pandas】DataFrameで日付・時間の列を処理する方法 _to_datetime_

pandasのDataFrameで日付・時間の列を処理する方法について解説します。

DataFrameで日付・時間の列を処理する

csvファイルで読み込んだ日付・時間の列を処理する

日付・時間列の計算

pandasを用いたデータ分析では、日付・時間の列を含んだcsvファイルを読み込んで、時間列で計算するようなケースがよくあります。

以下は今回例で使用するsample_datetime.csvの中身です。

id,start_datetime,end_datetime
1,2022/1/1 9:00,2022/1/1 10:00
2,2022/1/15 0:00,2022/1/20 0:00
3,2022/2/1 9:00,2022/2/5 18:30
4,2022/2/15 5:00,2022/2/15 10:30
5,2022/2/28 0:00,2022/2/28 12:00

このファイルを読み込み、開始時刻列(start_datetime)と終了時刻列(end_datetime)の差分を計算して経過時間を計算してみることを考えてみます。

import pandas as pd

df = pd.read_csv('sample_datetime.csv', encoding='utf-8')
df['diff_datetime'] = df['end_datetime'] - df['start_datetime']

print(df, '\n')
print(df.dtypes)
【実行結果】
TypeError: unsupported operand type(s) for -: 'str' and 'str'

上記のプログラムでは、結果としてTypeErrorとなってしまいます。

read_csvで読み込まれた日付・時刻の列は文字列である’object’として取り込まれます。そのため、「-」という演算が適用されずエラーとなります。

この状況に対応するためには、該当列を日付・時間の型の列に変換する必要があります。

datetimeに変換して処理する ~to_datetime~

上記で紹介したようにcsvファイルから日付・時間の列を取りこむと、そのままでは該当列での計算ができませんでした。このような場合には、以下のようにto_datetime関数を使用して、日付・時刻の型に型変換をしてから処理をします。

import pandas as pd

df = pd.read_csv('sample_datetime.csv', encoding='utf-8')
print(df, '\n')
print(df.dtypes, '\n')

# 型変換を実施する
df['start_datetime'] = pd.to_datetime(df['start_datetime'])
df['end_datetime'] = pd.to_datetime(df['end_datetime'])

# 時間の差分を計算する
df['diff_datetime'] = df['end_datetime'] - df['start_datetime']

print(df, '\n')
print(df.dtypes)
【実行結果】
   id  start_datetime     end_datetime
0   1   2022/1/1 9:00   2022/1/1 10:00
1   2  2022/1/15 0:00   2022/1/20 0:00
2   3   2022/2/1 9:00   2022/2/5 18:30
3   4  2022/2/15 5:00  2022/2/15 10:30
4   5  2022/2/28 0:00  2022/2/28 12:00 

id                 int64
start_datetime    object
end_datetime      object
dtype: object 

   id      start_datetime        end_datetime   diff_datetime
0   1 2022-01-01 09:00:00 2022-01-01 10:00:00 0 days 01:00:00
1   2 2022-01-15 00:00:00 2022-01-20 00:00:00 5 days 00:00:00
2   3 2022-02-01 09:00:00 2022-02-05 18:30:00 4 days 09:30:00
3   4 2022-02-15 05:00:00 2022-02-15 10:30:00 0 days 05:30:00
4   5 2022-02-28 00:00:00 2022-02-28 12:00:00 0 days 12:00:00 

id                          int64
start_datetime     datetime64[ns]
end_datetime       datetime64[ns]
diff_datetime     timedelta64[ns]
dtype: object

csvファイルを取り込んだ後のstart_datetimeやend_datetime列の型は’object’となっていますが、to_datetime関数で「datetime64」の型に変換されていることが分かります。また、差分を求めて新しく作成した列であるdiff_datetime列は「timedelta64」型として計算ができていることが分かります。これらの型は日付・時間や時間間隔を表す型となっていて時間の計算ができるようになります。

このようにto_datetimeを使用してdatetimeに型変換することで日付・時間の列を処理することができますので、日付・時間を含むデータを扱うときに活用してみてください。

Note

to_datetimeの公式ドキュメントの記載はこちらを参照してください。