質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

3回答

11971閲覧

Pythonで日時表記を24:00から00:00に変更したい

yozakura

総合スコア10

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2017/12/05 03:58

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2017/12/05 05:06

25時や26時も考慮すべきですか?
guest

回答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

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yozakura

2017/12/05 09:47

とても簡潔でわかりやすいコードですね! (使ってみてびっくりしました) 疑問点なのですが、0時 -> 24時変換はどうやったらできそうでしょうか? (なにから何まですいません) 例) 201303050000(2013年03月05日00時00分) → 201303042400(2013年3月4日24時00分)
yozakura

2017/12/05 09:57

2番目の関数を見落としていました! (申し訳ありません)
guest

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
can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yozakura

2017/12/05 09:43

24:00以降も考慮してくださってありがとうございます! (とても勉強になりました!!) 今回は24:00までのデータで、24時までを前日として設定されています! この場合だと0時 -> 24時変換はどうなるのでしょうか? 201303050000(2013年03月05日00時00分) → 201303042400(2013年3月4日24時00分)
can110

2017/12/05 09:55 編集

「0時 -> 24時変換」はtoStr関数で行っています。 実際に動かしてみると確認できますが str型「201303050000」はtoDt関数にてdatetime型「2013-03-05 00:00:00」になり それをtoStr関数に通すとstr型「201303042400」が得られます。 考え方としては、午前0時以降ならn時間だけ巻き戻して前日日付を得て、時間部分だけ±nを自力で計算する感じです。
yozakura

2017/12/05 10:07

本当だ! (こちらの早とちりでした..) 私もcan110様みたいなコードが書けるように励ませていただきます (何度もご助力くださり本当にありがとうございました)
guest

0

python

1a="20170228" 2b=a[0:5]+"/"+a[5:7]+"/"+a[6:8] 3pd.to_datetime(b)

投稿2017/12/05 05:01

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問