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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1529閲覧

数字データを時刻に変換して処理したい

mn.py

総合スコア41

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/27 04:23

行いたい処理

以下の様なマイクロ秒まで入っているデータを、1分単位で切り捨てて、秒まで表示する様な処理を行い、ラベルをつけたいです。

python

1with open('dat1.csv','w') as f: 2 f.write( 3'''id,time 41,90000074007 52,90000385068 63,90110385068 74,90201385068 8''')

例)
id,time,label
1,90000074007→1,090000 ,0
2,90000385068→2,090000 ,0
3,90110385068→3,090100 ,1
4,90201385068→4,090200 ,2

試したこと・調べたこと

まずは一つづつ、と考えて時刻として扱えないか試しに以下を行いました。

python

1aTime = datetime.time(90000074007)

結果
OverflowError: signed integer is greater than maximum

色々調べたのですが、元々のdataが上記の様に整数だけだとどの様に応用したらいいのかわかりませんでした。
初歩的なことかもしれませんが、どなたかご教授いただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

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

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

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

jeanbiego

2020/10/27 04:36

4,90201385068→4,090200 ,2 9h 02m 01s 385ms 068us という認識で合ってますか? labelは分を1桁表示で使うんでしょうか。
mn.py

2020/10/27 04:41

ありがとうございます。 認識であっています。 labelは1分刻みでラベル付けしたいだけですので、分を使うというよりは 090000=0 090100=1 090200=2 100000=60 100100=61 ・ ・ といった感じで増えていくイメージです。
jeanbiego

2020/10/27 05:09

ありがとうございます。でも、ここではなく質問文を編集するようにしてください。 とりあえず、時刻への変換を回答しましたが、「1分単位で切り捨てて、秒まで表示する様な処理を行い、ラベルをつけたい」というのはよく分かりませんでした。 この辺の、今の課題と求める形の法則性をもっと具体的に書かれると、有用な回答もつくかなと思います。
mn.py

2020/10/27 15:37

ありがとうございました。なれなくてご迷惑おかけいたしましたが、無事解決いたしました!
guest

回答1

0

ベストアンサー

とりあえず、時刻として扱うためにゼロ埋め~変換を行いました。

python3

1import pandas as pd 2import io 3data = '''id,time 41,90000074007 52,90000385068 63,90110385068 74,90201385068 85,100201385068 9''' 10df = pd.read_csv(io.StringIO(data)) 11# ここまでテスト用データ 12 13def zfill_12(t): 14 return str(t).zfill(12) 15df["time"] = df["time"].apply(zfill_12) # 時をゼロ埋め 16df["time"] = pd.to_datetime(df["time"], format="%H%M%S%f") # 文字列→時刻 17print(df) 18# id time 19#0 1 1900-01-01 09:00:00.074007 20#1 2 1900-01-01 09:00:00.385068 21#2 3 1900-01-01 09:01:10.385068 22#3 4 1900-01-01 09:02:01.385068 23#4 5 1900-01-01 10:02:01.385068

投稿2020/10/27 05:07

編集2020/10/27 05:10
jeanbiego

総合スコア3966

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問