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

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

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

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

pandas

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

Q&A

解決済

1回答

1138閲覧

pandas DataFrameのフォーマット変換

SiGat6cFS4zMWqO

総合スコア8

Python

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

pandas

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

0グッド

1クリップ

投稿2020/10/12 08:26

前提・実現したいこと

DataFrameのrace['time']は、'%M:%S.%'および'%M:%S:%'および'%M.%S.%'のフォーマットが混在しています。これを一律、'%M:%S.%'に変換したいのですが、どのようにすればよいでしょうか?

試したこと

map関数、query関数を使ってやってみましたが、いずれもエラーでした。

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

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

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

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

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

takutakuya

2020/10/12 08:50

race['time']は文字列として格納されているのでしょうか?
SiGat6cFS4zMWqO

2020/10/12 09:54

dtype:int64となります。
takutakuya

2020/10/12 10:30

intですか? 一部で構わないので、実際のデータを見てみたいです。
toast-uz

2020/10/12 11:10

int64なのに、なぜ質問では文字列フォーマットが混在している、という表現なのでしょうか?
SiGat6cFS4zMWqO

2020/10/16 00:22

一部をスライスしてみました。 race['time'].value_counts()[2130:2160] 4:50.2 1 4:33.6 1 2:04.67 1 2:24.77 1 1:23.23 1 5:05.8 1 2:28:2 1 1:37.69 1 4:33.1 1 Name: time, dtype: int64
toast-uz

2020/10/16 10:28

value_counts()しないで見せられますでしょうか?
guest

回答1

0

ベストアンサー

以下のようにとりあえず変換してみる手もあります。

Python

1import datetime 2import pandas as pd 3 4def f(s): 5 for fmt in ['%M:%S.%f', '%M:%S:%f', '%M.%S.%f']: 6 try: 7 return datetime.datetime.strptime(s, fmt) 8 except ValueError: 9 pass 10 11df = pd.DataFrame({'time':['1:2.3','4:5:6','7.8.9']}) 12df['time'] = df['time'].apply(f) 13print(df) 14# time 15#0 1900-01-01 00:01:02.300 16#1 1900-01-01 00:04:05.600 17#2 1900-01-01 00:07:08.900 18 19df['time'] = df['time'].dt.strftime('%M:%S.%f') 20print(df) 21# time 22#0 01:02.300000 23#1 04:05.600000 24#2 07:08.900000

投稿2020/10/12 08:51

can110

総合スコア38341

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

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

SiGat6cFS4zMWqO

2020/10/12 09:57

ありがとうございます。 実行してみましたが、以下の通りのエラーとなってしまいました。 TypeError: strptime() argument 1 must be str, not float
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問