閉じる

【Python】文字列を数値に変換する方法まとめ|int・float・演算への応用まで徹底解説

Pythonでは、ユーザー入力やファイルから読み込んだ値が文字列になっていることが多く、そのままでは足し算や平均値の計算ができません。

本記事では、文字列を数値(int・float)に変換する基本から、エラーを防ぐテクニック、実務での活用方法までを、サンプルコードと図解を交えながら丁寧に解説していきます。

Pythonで文字列を数値に変換する基本

文字列をint型に変換する

Pythonでは、文字列を整数に変換するにはint()関数を使います。

たとえば、文字列"123"を整数の123に変換したい場合は、次のように書きます。

Python
# 文字列を整数(int)に変換する基本例

text = "123"          # これは文字列
number = int(text)    # int()で整数に変換

print(text, type(text))      # 変換前の型を確認
print(number, type(number))  # 変換後の型を確認
実行結果
123 <class 'str'>
123 <class 'int'>

このように見た目は同じでも、型がstrからintへ変わることで、足し算や比較などの数値演算が可能になります

よくあるパターンとして、ユーザー入力input()の結果は必ず文字列になるため、そのままでは計算できません。

後ほど詳しく扱いますが、基本形は次のようになります。

Python
age_text = input("年齢を入力してください: ")  # ここでは str 型
age = int(age_text)                          # int に変換してから使う

print(f"来年の年齢は {age + 1} 歳です。")

文字列をfloat型に変換する

小数点を含む数値を扱いたい場合はfloat()関数を使います。

たとえば、身長や金額など、端数を含む値は整数では足りません。

Python
# 文字列を浮動小数点数(float)に変換する基本例

text = "3.14"             # 文字列としての「3.14」
value = float(text)       # float()で小数として扱えるようにする

print(text, type(text))        # 変換前
print(value, type(value))      # 変換後
print(value * 2)               # 小数の演算もできる
実行結果
3.14 <class 'str'>
3.14 <class 'float'>
6.28

小数点を含む文字列をint()で変換しようとするとエラーになることに注意してください。

この場合はfloat()を使う必要があります。

intとfloatの違いと使い分けポイント

Pythonでは数値型として代表的なものにintfloatがあります。

ざっくりまとめると、次のような違いがあります。

型名小数点主な用途
int0, 10, -3なし個数、回数、年齢、IDなど
float0.0, 3.14, -2.5あり金額(税計算)、距離、割合、平均値など

使い分けのイメージとしては、「必ず整数で表現されるものはint」「小数が出る可能性が少しでもあるならfloatと考えると分かりやすいです。

また、型が違うと計算結果の型も変わります。

Python
a = 2        # int
b = 3        # int
c = 2.0      # float

print(a + b, type(a + b))   # int + int → int
print(a + c, type(a + c))   # int + float → float
実行結果
5 <class 'int'>
4.0 <class 'float'>

整数同士の計算はintですが、どちらか一方がfloatになると結果もfloatになる点も覚えておくと、型の混在時に迷いにくくなります。

数値変換でよく使う関数と書き方

intで10進数の文字列を整数に変換する方法

日常で扱う通常の数値(10進数)の文字列を整数に変換する場合、int()をそのまま使います。

Python
# 10進数の文字列を int に変換する

print(int("10"))   # 10
print(int("0"))    # 0
print(int("-5"))   # -5

# 先頭や末尾に空白がある場合も、int() は自動で無視してくれます
print(int("  42"))   # 42
print(int("7\n"))    # 7 (改行付き文字列)
実行結果
10
0
-5
42
7

空白や改行を含む場合でも、自動的に読み飛ばして変換してくれるため、基本的な入力処理ではあまり気にしなくても構いません。

ただし、余計な文字(カンマや単位など)が混ざるとエラーになるので、必要に応じて前処理を行います。

intで基数(2進数・16進数など)を指定して変換する方法

int()は第2引数に基数(base)を指定することで、2進数や16進数など、さまざまな表現から10進数の整数に変換できます。

Python
# 2進数(基数2)の文字列を10進数の int に変換
print(int("1010", 2))   # 2進数の1010 → 10進数の10

# 8進数(基数8)
print(int("17", 8))     # 8進数の17 → 10進数の15

# 16進数(基数16)
print(int("FF", 16))    # 16進数のFF → 10進数の255
print(int("ff", 16))    # 大文字小文字どちらでもOK
実行結果
10
15
255
255

第2引数を省略した場合の基数は10です。

そのため、通常の数値文字列を扱う限りは1引数のint("123")の形で問題ありません。

基数を使うのは、バイナリ表現やカラーコード(16進)などを処理する場面です。

floatで小数を含む文字列を数値に変換する方法

float()を使うと、小数点や指数表現を含んだ文字列も変換できます。

Python
# 小数を含む文字列を float に変換
print(float("3.14"))    # 3.14
print(float("-0.5"))    # -0.5

# 指数表現(サイエンティフィック表記)も変換可能
print(float("1e3"))     # 1 × 10^3 → 1000.0
print(float("2.5e-2"))  # 2.5 × 10^-2 → 0.025
実行結果
3.14
-0.5
1000.0
0.025

「1000」など小数点のない文字列でもfloat()で変換できますが、その場合の結果は1000.0になります

整数として扱ってよい値はint()を、小数点以下が必要な値や、将来的に小数になる可能性がある値はfloat()を使うとよいです。

数値から文字列へ変換する方法

逆に、数値を文字列にしたい場面も非常に多くあります。

代表的な用途は文字列結合やメッセージ表示です。

この場合はstr()を使います。

Python
# 数値から文字列へ変換する

num_int = 123
num_float = 3.5

text_int = str(num_int)       # "123"
text_float = str(num_float)   # "3.5"

print(text_int, type(text_int))
print(text_float, type(text_float))

# 文字列結合の例
message = "合計は " + str(1500) + " 円です。"
print(message)
実行結果
123 <class 'str'>
3.5 <class 'str'>
合計は 1500 円です。

最近では、f"..."形式のフォーマット文字列を使うことも多く、f文字列は内部で自動的にstr()変換をしてくれます

Python
price = 1500
tax = 0.1
total = price * (1 + tax)

# f文字列を使うと str() を明示的に書かなくてよい
message = f"税込金額は {total} 円です。"
print(message)
実行結果
税込金額は 1650.0 円です。

エラーを防ぐ文字列から数値への変換テクニック

int・float変換時のValueErrorと原因

int()float()で変換できない文字列を渡すと、ValueErrorという例外が発生します。

Python
# ValueError が発生する例

print(int("abc"))      # 数字ではない → エラー
print(int("12a"))      # 一部に文字が混ざっている → エラー
print(int("3.14"))     # int() は小数点付きには使えない → エラー
実行結果
Traceback (most recent call last):
  ...
ValueError: invalid literal for int() with base 10: 'abc'

原因は「渡された文字列が、その型として有効な数値表現になっていない」ことです。

対策としては、次の2ステップを組み合わせます。

  1. 変換前に文字列が数値として妥当かをチェックする
  2. 万が一のエラーをtry-exceptで受け止める

それぞれ、次の見出しで詳しく解説します。

isdigitやisnumericで数値文字列かチェックする方法

変換前に、その文字列が数字だけで構成されているかを確認するには、str.isdigit()str.isnumeric()といったメソッドが使えます。

Python
# isdigit() と isnumeric() の基本例

print("123".isdigit())     # True
print("12a".isdigit())     # False
print("".isdigit())        # False (空文字は数字ではない)

# 全角数字
full_width = "3"
print(full_width.isdigit())    # False になることが多い
print(full_width.isnumeric())  # True になるケースがある
実行結果
True
False
False
False
True

一般的なASCII数字(0〜9)だけを許可したい場合はisdigit()で十分です。

一方で、全角数字やローマ数字など、広い意味での数値文字を扱う場合はisnumeric()を使うと安全です。

ただし、小数点やマイナス記号を含む文字列はisdigit()/isnumeric()では数値とみなされないため、次のようなケースでは自前でチェックするか、例外処理を使う必要があります。

Python
print("-10".isdigit())   # False (マイナス記号が含まれる)
print("3.14".isdigit())  # False (小数点が含まれる)

例外処理(try-except)で安全に数値変換する方法

どんな文字列が来るか完全には予測できない場合は、try-exceptで変換処理を囲み、エラーが起きてもプログラムが止まらないようにします。

Python
# 例外処理を使って安全に int 変換する関数の例

def to_int_safe(text):
    try:
        # まず変換を試す
        return int(text)
    except ValueError:
        # 変換できなかった場合の処理
        print(f"'{text}' は整数に変換できませんでした。")
        return None  # 変換に失敗したことを示す

values = ["10", "abc", "3.14", "-5"]

for v in values:
    result = to_int_safe(v)
    print(v, "→", result)
実行結果
10 → 10
'abc' は整数に変換できませんでした。
abc → None
'3.14' は整数に変換できませんでした。
3.14 → None
-5 → -5

例外処理は「ダメ元でやってみて、ダメなら別の処理に切り替える」ための仕組みです。

ユーザー入力やファイルからの読み込みなど、外部要因でエラーが起こりやすい場所では必須のテクニックと言えます。

空文字・None・全角数字などのハマりどころ

文字列から数値への変換で、初心者が特につまずきやすいポイントを整理します。

1つ目は空文字""です。

見た目には「何も入力されていない」だけですが、そのままint("")float("")するとエラーになります。

Python
print(int(""))    # ValueError

空文字を許容する場合は、変換前にif text == "":のように条件分岐しておきましょう。

2つ目はNoneを数値に変換しようとするケースです。

これはValueErrorではなくTypeErrorになります。

Python
value = None
print(int(value))   # TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'

3つ目は全角数字です。

ユーザーが日本語入力のまま数字を打つと、"3"のような全角になり、int("3")はエラーになります。

この場合はtranslate()や外部ライブラリで半角に変換するなどの前処理が必要です。

4つ目はカンマや単位付きの文字列です。

たとえば"1,000""100円"はそのままでは変換できませんが、置換で対処できます。

Python
text = "1,000"
clean = text.replace(",", "")     # カンマを除去
print(int(clean))                 # 1000
実行結果
1000

このような「想定外の文字」が混ざるケースでは、前処理 + 例外処理を組み合わせて堅牢な実装にしていくことが重要です。

文字列の数値変換を演算・実務で活用する方法

入力値(input)を数値に変換して計算する方法

ユーザーから数値を入力してもらい、計算に利用する処理は非常によく登場します。

input()は必ず文字列を返すため、int()float()での変換が必須です。

Python
# ユーザー入力を数値に変換して使う例

age_text = input("年齢を入力してください: ")

try:
    age = int(age_text)   # 整数に変換
    print(f"10年後は {age + 10} 歳です。")
except ValueError:
    print("数値として解釈できる年齢を入力してください。")
実行結果
年齢を入力してください: 25
10年後は 35 歳です。

このように、入力 → 文字列 → 数値変換 → 計算という流れが、インタラクティブなプログラムの基本パターンです。

リスト内包表記で複数の文字列を一括変換する方法

複数の文字列数値をまとめて整数や小数に変換したいときには、リスト内包表記が便利です。

Python
# 文字列のリストを整数のリストに変換する

str_numbers = ["1", "2", "3", "4", "5"]

# 通常のループでの書き方
int_numbers_loop = []
for s in str_numbers:
    int_numbers_loop.append(int(s))

# リスト内包表記を使った書き方
int_numbers_comp = [int(s) for s in str_numbers]

print("ループ:", int_numbers_loop)
print("内包表記:", int_numbers_comp)
実行結果
ループ: [1, 2, 3, 4, 5]
内包表記: [1, 2, 3, 4, 5]

1行でスッキリ書けるため、データ変換処理では頻出のパターンです。

ただし、途中に変換できない文字列が混ざるとValueErrorになるため、必要に応じて条件付きで変換する、あるいは例外処理付きの関数を呼び出すなどの工夫をします。

CSVやファイルの数値データを文字列から変換する方法

ファイル(CSVなど)から読み込んだデータは、基本的に全て文字列として扱われます。

集計や統計処理を行うには、必要な列を数値に変換する必要があります。

以下は、標準ライブラリcsvを使った簡単な例です。

Python
import csv

# サンプル用にCSV文字列を用意(通常はファイルから読み込む)
from io import StringIO

csv_data = """name,age,score
Alice,20,85
Bob,19,90
Charlie,21,78
"""

file_like = StringIO(csv_data)

reader = csv.DictReader(file_like)  # 1行ごとに dict で取得できる

total_score = 0
count = 0

for row in reader:
    # row は {"name": "...", "age": "...", "score": "..."} という文字列辞書
    age = int(row["age"])          # 年齢を整数に
    score = int(row["score"])      # 点数を整数に

    total_score += score
    count += 1

average = total_score / count
print(f"平均点は {average} 点です。")
実行結果
平均点は 84.33333333333333 点です。

このように、ファイル読み込み → 文字列として取得 → 必要な列だけ数値に変換 → 計算という流れが、データ処理の基本形になります。

実務では、ここにエラー処理や欠損値処理などが加わります。

文字列数値の変換・演算を組み合わせたサンプルコード

最後に、これまでの内容を組み合わせた少し実務寄りのサンプルを示します。

ここでは、文字列として与えられた単価と数量から、商品ごとの金額と合計金額を計算します。

Python
# 売上データを文字列から数値に変換して集計する総合サンプル

items = [
    {"name": "りんご", "price": "120", "quantity": "3"},
    {"name": "バナナ", "price": "80",  "quantity": "5"},
    {"name": "オレンジ", "price": "150", "quantity": "2"},
    {"name": "ぶどう", "price": "300", "quantity": "1"},
]

total_amount = 0

for item in items:
    # 文字列の単価・数量を int に変換
    try:
        price = int(item["price"])
        quantity = int(item["quantity"])
    except ValueError:
        # 変換できないデータがあればその行はスキップ
        print(f"{item['name']} のデータに不正な値があります。スキップします。")
        continue

    amount = price * quantity  # 金額を計算
    total_amount += amount

    print(f"{item['name']} の金額: {amount} 円")

print("-" * 20)
print(f"合計金額: {total_amount} 円")
実行結果
りんご の金額: 360 円
バナナ の金額: 400 円
オレンジ の金額: 300 円
ぶどう の金額: 300 円
--------------------
合計金額: 1360 円

このサンプルでは、次のようなポイントを押さえています。

  • データはすべて文字列として与えられる
  • 単価と数量だけint()で変換し、計算に利用する
  • 変換時にValueErrorが起きた場合は、その商品だけスキップする

「入力やデータは文字列」「計算に使うときだけ数値に変換」という考え方は、実務のコードでも非常に重要です。

まとめ

Pythonでの文字列から数値への変換は、int()とfloat()を使い分けることが基本ですが、実際の開発ではValueError対策・事前チェック・例外処理が欠かせません。

ユーザー入力やCSVファイルなど、外部から入るデータはまず文字列として受け取り、isdigit()などで妥当性を確認しつつ、必要な部分だけを数値へ変換します。

入力→変換→演算という流れを押さえておけば、集計処理やWebアプリのフォーム処理など、さまざまな場面で安全かつ柔軟に数値を扱えるようになります。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!