yyyymmddhhmm形式の時刻を24:00から00:00に変更したいのですがはまってしまいました。
例)201303042400(2013年3月4日24時00分) → 201303050000(2013年03月05日00時00分)
import datetime import pandas as pd x = '201303042400' y = pd.to_datetime(x) ValueError: hour must be in 0..23
また
201303050000(2013年03月05日00時00分) → 201303042400(2013年3月4日24時00分)
に戻すやり方も教えていただけるとありがたいです!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
こんな感じでどうですか?
Python
1import datetime 2import pandas as pd 3 4def str2datetime(s): 5 Y,m,d,H,M = map(int, (s[:4], s[4:6], s[6:8], s[8:10], s[10:])) 6 return datetime.datetime(Y,m,d) + datetime.timedelta(hours=H, minutes=M) 7 8def datetime2str(d): 9 if d.hour == 0 and d.second == 0: 10 return (d - datetime.timedelta(days=1)).strftime("%Y%m%d2400") 11 return d.strftime("%Y%m%d%H%M") 12 13x = '201303042400' 14y = str2datetime(x)
DataFrameに適用したい場合は
apply()
を使ってください
投稿2017/12/05 05:14
総合スコア15898
0
強引ですが24時以上は前日扱いにする例です。
0時→24時変換において、何時までを前日扱いにするかは決める必要があります。
参考:How to deal with time values over 24 hours in python?
Python
1 2import datetime 3 4# 24時以降を考慮しdatetime型に変換 5def toDt( s): 6 diff = 0 7 if int(s[8:10]) >= 24: 8 diff = int(s[8:10]) - 23 # 1~ 9 s = s[:8] + '23' + s[10:] 10 11 dt = datetime.datetime.strptime(s, '%Y%m%d%H%M') 12 if diff > 0: 13 dt += datetime.timedelta(hours=diff) 14 15 return dt 16 17# 24時以降を考慮しstr型に変換 18def toStr( dt): 19 diff = 0 20 if dt.hour <= 3: # 午前3時まで前日扱いとする 21 diff = dt.hour + 1 22 dt -= datetime.timedelta(hours=diff) 23 24 s = dt.strftime('%Y%m%d%H%M') 25 if diff > 0: 26 s = s[:8] + str(23+diff) + s[10:] 27 28 return s 29 30ds = ['201303042300','201303042400','201303042500'] 31 32for d in ds: 33 print(d) 34 dt = toDt(d) 35 print(dt) 36 s = toStr(dt) 37 print(s)
投稿2017/12/05 05:21
編集2017/12/05 05:23総合スコア38341
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/05 09:43
2017/12/05 09:55 編集
2017/12/05 10:07
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。