pandasのDataFrameで日付・時間の列を処理する方法について解説します。
Contents
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に型変換することで日付・時間の列を処理することができますので、日付・時間を含むデータを扱うときに活用してみてください。
to_datetimeの公式ドキュメントの記載はこちらを参照してください。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。