Last Updated on 2025年7月28日
Pythonで数値データを扱う処理をしていると、以下のようなエラーが表示されることがあります。
|
1 |
ValueError: could not convert string to float: 'xxx' |
このエラーは、文字列(str)から浮動小数点(float)への変換に失敗したときに出現します。
目次
- ValueError: could not convert string to float の意味
- エラーが起こるよくあるケース
- エラーの修正方法とコード例
- 修正前にチェックすべきポイント
- 実際のプロジェクトでの対応例
- 数値変換時の注意点
- よくある質問と補足
ValueError: could not convert string to float の意味
このエラーは、float() 関数を使って文字列を浮動小数点に変換しようとした際に、文字列が数値形式でないときに発生します。
エラー例:
|
1 |
float("abc") # 文字列が数値でない |
上記のように、数値でない文字列をfloatに変換しようとすると、ValueErrorが発生します。
ValueErrorが起きるよくあるケース
次のようなケースで頻繁にこのエラーが発生します。
① 数字以外の文字列をfloatに変換
|
1 |
float("abc") # 英字などは変換できない |
② カンマや全角記号が含まれている
|
1 |
float("1,234.56") # カンマはNG |
③ 空文字列をfloatに変換
|
1 |
float("") # 空の文字列もエラーになる |
④ 日本語の入った文字列
|
1 |
float("五百") # 全角文字列は変換不可 |
ValueError: could not convert string to float の修正方法とコード例
このエラーを修正するには、floatに変換する前に文字列の中身を確認・処理することが必要です。
① isdigitやreplaceで前処理
|
1 2 3 |
value = "1,234.56" cleaned = value.replace(",", "") num = float(cleaned) # OK |
② try-exceptで例外処理
|
1 2 3 4 5 |
value = "abc" try: num = float(value) except ValueError: print("変換できませんでした") |
③ 空文字列をチェック
|
1 2 3 4 5 |
value = "" if value.strip() == "": print("空文字です") else: num = float(value) |
修正前にチェックすべきポイント
次のポイントをチェックすることで、エラーの発生を未然に防げます。
- 変換対象が「数字のみ」で構成されているか?
- カンマや通貨記号が入っていないか?
- 空文字列やNoneではないか?
- 全角数字や記号が混在していないか?
実際のプロジェクトでの対応例
CSVファイルを読み込む処理での対応
|
1 2 3 4 5 6 7 8 9 10 11 |
import csv with open("data.csv", newline="") as f: reader = csv.reader(f) for row in reader: price_str = row[1] try: price = float(price_str.replace(",", "")) except ValueError: price = 0.0 # デフォルト値を設定 print(price) |
このように、CSVやExcelから読み込んだデータは人が入力しているため、変換できない文字列が混ざっていることがよくあります。
数値変換時の注意点
- float(100) → OK
- float("100.5") → OK
- float(" 100.5\n") → OK(余白や改行は自動除去される)
- float("¥100") → NG(記号は不可)
日本語のファイルやサイトから取得したデータでは、全角数字や¥マークなどがよく含まれます。
よくある質問と補足
Q. int()との違いは?
int()は整数のみを受け付け、float()は小数も含めた数値を変換できます。変換エラーの原因は類似しています。
Q. replaceで一括置換すれば安全?
replaceは有効ですが、変換対象によっては正規表現の方が安全な場合もあります。
Q. pandasを使えば自動で変換できる?
pandas.read_csv(..., dtype=...) や to_numeric を使えば、変換できない値をNaNにできます。
|
1 2 3 |
import pandas as pd df = pd.read_csv("data.csv") df["価格"] = pd.to_numeric(df["価格"], errors="coerce") |
このエラーは初心者のつまづきポイントのひとつです。変換前のデータ検証と例外処理を組み合わせて、安定したコードを目指しましょう。
他のPythonエラー対策記事も併せてご活用ください。


