読者です 読者をやめる 読者になる 読者になる

ゆるふわめも

in Kyoto or Tokyo

pythonで文字列を日付(datetime)に変換後、日付間の日数の差を求める

よく特徴を新しく作る時に使うのでメモ。

やりたいこと

csvファイルの二つのカラムに入った文字列形式の日時データ、その二つの日時データの日数の違いを一気に計算したい。

下のデータ形式だと end_date_time - start_date_time の日数の差を求めたい。

データ形式

data["start_date_time"], data["end_date_time"] の中身は...

2014-12-22 02:12:32,
2015-01-21 05:15:03,
2016-02-02 06:13:31,
2014-09-02 03:11:12,

とします。data変数は適当な .csvファイルから pandas.read_csv(..)でロードしたファイルです。

変換コード

from datetime import datetime
from datetime import date
import pandas as pd

# data には上記のデータが入っているとします
data = pd.read_csv('filename')

# 文字列データを一括で datetime に変換します
data["start_date_time"] = data["start_date_time"].apply(lambda x:datetime.strptime(x[:10], "%Y-%m-%d"))
data["end_date_time"] = data["end_date_time"].apply(lambda x:datetime.strptime(x[:10], "%Y-%m-%d"))

# 日数の差
day_difference = (data["end_date_time"]-data["start_date_time"]).apply(lambda x: x.days)

上記で x[:10]としたのは 文字列 "2014-09-02 03:11:12" の後半はいらないため。同様の形式で分差などもできます。

しばしば日時データは欠損してる(という勝手な印象を持っている)ので正直上のような一個でもnullがあるとエラーになるコードは使いにくい。 そのため下のように外部に関数を定義します。

他にもっといい方法あるかもしれません。