めも

メモ.

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があるとエラーになるコードは使いにくい。 そのため下のように外部に関数を定義します。

以下でも使用します.

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。