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

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

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

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

Q&A

解決済

2回答

179閲覧

[python]リスト内に文字列で表現された数値を単なる数値データに変換したい

mini1988

総合スコア56

Python 3.x

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

0グッド

0クリップ

投稿2018/04/04 08:17

今、以下のようなデータがあります。

data=
[[1332, '560', '566', '556', '563'],
[1333, '3,480', '3,585', '3,465', '3,565'],
[1605, '1,309.5', '1,310', '1,287.5', '1,292'],
[1721, '2,814', '2,823', '2,776', '2,796'],
[1801, '5,340', '5,380', '5,310', '5,360'],
[1802, '1,146', '1,152', '1,138', '1,146'],
[1803, '944', '953', '934', '950']]

上記のデータを以下にように変換できることを期待しています。

(リスト内の各リストの最初の要素を削除し、それ以外の数値文字列を数値(float型)に変換したい)

[[560.0, 566.0, 556.0, 563.0],
[3480.0, 3585.0, 3465.0, 3565.0],
[1309.5, 1310.0, 1287.5, 1292.0],
[2814.0, 2823.0, 2776.0, 2796.0],
[5340.0, 5380.0, 5310.0, 5360.0],
[1146.0, 1152.0, 1138.0, 1146.0],
[944.0, 953.0, 934.0, 950.0]]

以下のようにコードを書いてみたのですが、実現できませんでした。

new_data=list(map(float,data[i][1:]))

エラーメッセージ
ValueError: could not convert string to float: '3,480'

どのように記載すれば、私が思うことを実現できるのでしょうか?小数点やカンマが存在するのが気になるのですが、どのようにコードを書けば解決できるのか見当が付きません。どなたか、ご教授いただければ幸いです。

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

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

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

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

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

guest

回答2

0

小数点は大丈夫ですが、桁区切りのカンマが原因です。
lambda s : float(s.replace(',',''))のようにカンマを取り除いて数値化でいけます。

Python

1src = ['aaa','1,234','1,234,567.89'] 2l = list( map( lambda s : float(s.replace(',','')), src[1:])) 3print(l)

投稿2018/04/04 08:27

can110

総合スコア38266

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

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

can110

2018/04/04 08:28

やっぱりモロかぶったw
mini1988

2018/04/04 22:19

ご丁寧に回答をいただきまして、本当にありがとうございました。おかげさまで解決することができました。can110さまもベストアンサーにさせていただきたいのですが、ベストアンサーはおひとりしか選択できないようですので、先に同じ回答をいただいた方にベストアンサーとさせていただきます。大変申し訳ありません。次回からもよろしくお願いします。
guest

0

ベストアンサー

float(x)でxを浮動小数点数に変換する際、xはpythonの文法に従った数値の表現になってないといけません。カンマは人間に見やすい表記上のルールですがそれはpythonの文法では認められてないのです。カンマはリストの要素の区切りを表す特別な意味になってますので。

そこで'1,234.5'のような文字列を1234.5という数値とするには余計なカンマをあらかじめ除去する必要があります。というわけで

floatの代わりに
lambda x: float(x.replace(",", ""))

を指定すると期待通りになると思います。

投稿2018/04/04 08:26

KSwordOfHaste

総合スコア18394

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

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

mini1988

2018/04/04 22:19

ご丁寧に回答をいただきまして、本当にありがとうございました。おかげさまで解決することができました。次回からもよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問