めも

メモ.

pythonで日付を表す文字列から時間の差や時間の加算を求める

やりたいこと

2016-06-25 21:01:09.0002016/06/25 21-01-09 といった自由な形式の時間の差分を取りたい時。

コード

"%Y-%m-%d %H:%M:%S.000"の箇所を自由な形式に変換することで、どのようなデータにも対応できる。

import datetime as dt

# 時間
time1 = *2016-06-25 21:01:09.000*
time2 = *2016-06-26 22:21:11.000*

# datetimeに変換
new_time1 = dt.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S.000") 
new_time2 = dt.datetime.strptime(time2, "%Y-%m-%d %H:%M:%S.000") 

# 計算が可能になる
new_time1 - new_time2

大概はこのようなデータはcsvで大量に存在しているのでpandasのDataFrameにデータを格納して

def convert_time(t):return dt.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S.000") 

df.apply(lambda x: convert_time(x['time_column']), axis=1)

などとして一括変換してしまう。ちなみに pd.to_datetimeも存在する。その場合は

data['checkin_time'] = pd.to_datetime(data['boarding_time'], format="%m-%d-%Y")

となる。

時間の加算

time + dt.timedelta(hours=1)

記号の説明

ここより一部抜粋させていただきました。

記号 説明
%a ロケールにおける省略形の曜日名。
%A ロケールにおける省略なしの曜日名。
%b ロケールにおける省略形の月名。
%B ロケールにおける省略なしの月名。
%c ロケールにおける適切な日付および時刻表現。
%d 月の始めから何日目かを表す 10 進数 [01,31]。
%H (24 時間計での) 時を表す 10 進数 [00,23]。
%I (12 時間計での) 時を表す 10 進数 [01,12]。
%j 年の初めから何日目かを表す 10 進数 [001,366]。
%m 月を表す 10 進数 [01,12]。
%M 分を表す 10 進数 [00,59]。
%p ロケールにおける AM または PM に対応する文字列。
%S 秒を表す 10 進数 [00,61]。
%U 年の初めから何週目か (日曜を週の始まりとします)を表す 10 進数 [00,53]。年が明けてから最初の日曜日までの全ての 曜日は 0 週目に属すると見なされます。
%w 曜日を表す 10 進数 [0(日曜日),6]。
%W 年の初めから何週目か (日曜を週の始まりとします)を表す 10 進数 [00,53]。年が明けてから最初の月曜日までの全ての 曜日は 0 週目に属すると見なされます
%% 文字 "%" 自体の表現。

プライバシーポリシー

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