Python文字列を数値に変換|int()とfloat()の使い方

Pythonで文字列を数値に変換する方法を初心者向けに解説。int()関数による整数変換、float()関数による浮動小数点数変換、エラーハンドリングと実践例を紹介

Learning Next 運営
22 分で読めます

Python文字列を数値に変換|int()とfloat()の使い方

みなさん、Pythonで文字列と数値の違いで困ったことはありませんか?

「入力した数字が計算できない!」 「CSVファイルの数値データがうまく処理できない」 「文字列の"123"を数字の123にしたい」

こんな悩みを抱えた経験がある方は多いはずです。 でも大丈夫です!

Pythonのint()関数float()関数を使えば、文字列を簡単に数値に変換できます。 この記事では、基本的な使い方から実践的な活用方法まで、初心者の方にも分かりやすく解説します。

型変換をマスターして、データ処理をもっと効率的にしてみませんか?

文字列と数値の違いを理解しよう

まず最初に、なぜ文字列と数値が違うのかを理解しましょう。 これが分かると、型変換の必要性がよく分かります。

型の基本を確認してみよう

# 文字列型
text_number = "123"
print(type(text_number)) # <class 'str'>
print(text_number) # 123
# 整数型
int_number = 123
print(type(int_number)) # <class 'int'>
print(int_number) # 123
# 浮動小数点型
float_number = 123.45
print(type(float_number)) # <class 'float'>
print(float_number) # 123.45

このコードを実行すると、同じ「123」でも型が違うことが分かります。 type()関数を使うと、データの型を確認できます。

見た目は同じでも、Pythonは内部的に全く違うものとして扱います。

型の違いが分かる計算例

# 文字列の場合(連結される)
text1 = "10"
text2 = "20"
result_text = text1 + text2
print(result_text) # 1020(文字列の連結)
# 数値の場合(計算される)
num1 = 10
num2 = 20
result_num = num1 + num2
print(result_num) # 30(数値の計算)

文字列同士の+は連結を行います。 数値同士の+は加算を行います。

これが混乱の原因になることが多いですね。 でも、型変換をマスターすれば問題ありません!

int()関数で整数に変換しよう

int()関数を使って、文字列を整数に変換する方法を見てみましょう。 基本的な使い方から順番に説明します。

基本的な変換方法

# 基本的な変換
text = "123"
number = int(text)
print(number) # 123
print(type(number)) # <class 'int'>
# 計算での使用
price_text = "500"
quantity_text = "3"
total = int(price_text) * int(quantity_text)
print(f"合計: {total}円") # 合計: 1500円

int()関数に文字列を渡すと、整数に変換されます。 変換された数値は、計算に使用できます。

簡単ですよね!

負の数も変換できます

# 負の数の変換
negative_text = "-100"
negative_number = int(negative_text)
print(negative_number) # -100
# 符号付きの計算
temperature_text = "-5"
temperature = int(temperature_text)
tomorrow_temp = temperature + 3
print(f"今日の気温: {temperature}℃")
print(f"明日の気温: {tomorrow_temp}℃")

マイナス記号が付いた文字列も正しく変換できます。 気温や座標など、負の数を扱う場面でも安心です。

いろんな進数も変換可能

# 2進数の変換
binary_text = "1010"
binary_number = int(binary_text, 2)
print(f"2進数 {binary_text} は10進数で {binary_number}") # 10
# 8進数の変換
octal_text = "777"
octal_number = int(octal_text, 8)
print(f"8進数 {octal_text} は10進数で {octal_number}") # 511
# 16進数の変換
hex_text = "FF"
hex_number = int(hex_text, 16)
print(f"16進数 {hex_text} は10進数で {hex_number}") # 255

第二引数に基数を指定すると、いろんな進数の文字列を変換できます。 プログラミングでは、2進数や16進数もよく使われます。

これらの変換方法を覚えておくと便利ですよ!

float()関数で小数を扱おう

float()関数を使って、文字列を浮動小数点数に変換してみましょう。 小数点を含む数値の処理に使います。

基本的な小数変換

# 基本的な変換
decimal_text = "123.45"
decimal_number = float(decimal_text)
print(decimal_number) # 123.45
print(type(decimal_number)) # <class 'float'>
# 計算での使用
price = float("19.99")
tax_rate = float("0.1")
total_price = price * (1 + tax_rate)
print(f"税込価格: {total_price:.2f}円") # 税込価格: 21.99円

float()関数は小数点を含む文字列を浮動小数点数に変換します。 消費税の計算など、正確な小数計算ができるようになります。

整数も小数に変換できます

# 整数文字列もfloat変換可能
integer_text = "100"
float_number = float(integer_text)
print(float_number) # 100.0
print(type(float_number)) # <class 'float'>
# 計算での使用
score1 = float("85")
score2 = float("90")
score3 = float("78")
average = (score1 + score2 + score3) / 3
print(f"平均点: {average:.1f}点") # 平均点: 84.3点

整数を表す文字列もfloat()で変換できます。 小数点以下が.0になります。

平均点の計算など、割り算の結果を正確に表示したい場合に便利です。

科学記法も変換可能

# 科学記法の変換
scientific_text = "1.23e-4"
scientific_number = float(scientific_text)
print(scientific_number) # 0.000123
# 大きな数の科学記法
large_text = "1.5e6"
large_number = float(large_text)
print(large_number) # 1500000.0

科学記法(指数記法)で表現された文字列も変換できます。 非常に大きな数や小さな数を扱う際に役立ちます。

エラーを防ぐ安全な変換方法

文字列を数値に変換する際、変換できない文字列があるとエラーが起きます。 安全な変換方法を学んでおきましょう。

基本的なエラー対処法

# 無効な文字列の変換を試す
def safe_int_conversion(text):
try:
return int(text)
except ValueError as e:
print(f"エラー: '{text}' は整数に変換できません")
return None
# 使用例
valid_text = "123"
invalid_text = "abc"
result1 = safe_int_conversion(valid_text)
result2 = safe_int_conversion(invalid_text)
print(f"'{valid_text}' -> {result1}") # '123' -> 123
print(f"'{invalid_text}' -> {result2}") # 'abc' -> None

try-except文を使うと、変換エラーを安全に処理できます。 エラーが起きてもプログラムが止まりません。

これで安心してユーザー入力を処理できますね!

賢い変換関数を作ってみよう

def convert_to_number(text):
"""文字列を数値に変換する関数"""
# まず整数変換を試す
try:
return int(text)
except ValueError:
pass
# 次に浮動小数点数変換を試す
try:
return float(text)
except ValueError:
pass
# 両方失敗した場合
return None
# 使用例
test_values = ["123", "123.45", "abc", "1.5e2", ""]
for value in test_values:
result = convert_to_number(value)
print(f"'{value}' -> {result} ({type(result).__name__})")

この関数では、整数変換を先に試して、失敗したら小数変換を試します。 どちらも失敗したらNoneを返します。

柔軟で便利な変換関数ですね!

ユーザー入力の安全な取得

def get_valid_number(prompt, number_type="int"):
"""有効な数値を入力させる関数"""
while True:
user_input = input(prompt)
try:
if number_type == "int":
return int(user_input)
elif number_type == "float":
return float(user_input)
except ValueError:
if number_type == "int":
print("整数を入力してください")
else:
print("数値を入力してください")
# 使用例
age = get_valid_number("年齢を入力してください: ", "int")
height = get_valid_number("身長を入力してください(cm): ", "float")
print(f"年齢: {age}")
print(f"身長: {height}cm")

この関数は、有効な数値が入力されるまで繰り返し入力を求めます。 ユーザーがミスしても安心です。

実践的な活用例を見てみよう

型変換を使った実際のプログラム例を見てみましょう。 日常的な開発で役立つ使い方です。

CSVデータの処理

def process_csv_data(csv_text):
"""CSV データを処理する関数"""
lines = csv_text.strip().split('
')
header = lines[0].split(',')
data = []
for line in lines[1:]:
row = line.split(',')
processed_row = {}
for i, value in enumerate(row):
column_name = header[i].strip()
# 数値変換を試す
try:
# 整数変換を試す
processed_row[column_name] = int(value)
except ValueError:
try:
# 浮動小数点数変換を試す
processed_row[column_name] = float(value)
except ValueError:
# 文字列のまま
processed_row[column_name] = value.strip()
data.append(processed_row)
return data
# 使用例
csv_content = """名前,年齢,身長,体重
太郎,25,175.5,70.2
花子,30,162.3,55.8
次郎,35,180.0,80.5"""
processed_data = process_csv_data(csv_content)
for person in processed_data:
print(f"名前: {person['名前']}")
print(f"年齢: {person['年齢']}歳")
print(f"身長: {person['身長']}cm")
print(f"体重: {person['体重']}kg")
print("---")

CSVデータの処理では、自動的に数値変換を行います。 数値として扱える項目は数値型に、そうでないものは文字列のままにします。

データ分析などでよく使われるパターンです!

設定ファイルの読み込み

def load_config_file(config_text):
"""設定ファイルを読み込む関数"""
config = {}
for line in config_text.strip().split('
'):
if '=' in line and not line.strip().startswith('#'):
key, value = line.split('=', 1)
key = key.strip()
value = value.strip()
# 数値変換を試す
if value.lower() in ['true', 'false']:
config[key] = value.lower() == 'true'
else:
try:
config[key] = int(value)
except ValueError:
try:
config[key] = float(value)
except ValueError:
config[key] = value
return config
# 使用例
config_content = """
# アプリケーション設定
app_name=My Application
port=8080
debug=true
timeout=30.5
max_users=100
"""
config = load_config_file(config_content)
print("設定内容:")
for key, value in config.items():
print(f" {key}: {value} ({type(value).__name__})")

設定ファイルの読み込みでは、値の内容に応じて適切な型に変換します。 数値は数値型に、真偽値は論理型に自動変換されます。

アプリケーションの設定管理に便利ですね!

計算式の簡単な評価

def simple_calculator(expression):
"""簡単な計算式を評価する関数"""
# 危険な関数は使わず、基本的な演算のみ対応
try:
# スペースを削除
expression = expression.replace(' ', '')
# 基本的な計算のみ許可
allowed_chars = set('0123456789+-*/.()e')
if not all(c in allowed_chars for c in expression):
return None
# 評価実行
result = eval(expression)
return result
except:
return None
def process_calculations(calc_list):
"""計算式のリストを処理する関数"""
for expression in calc_list:
result = simple_calculator(expression)
if result is not None:
print(f"{expression} = {result}")
else:
print(f"{expression} = エラー")
# 使用例
calculations = [
"10 + 20",
"3.14 * 2",
"100 / 3",
"2 ** 3",
"sqrt(16)", # これはエラーになる
"10 + 20 * 3"
]
process_calculations(calculations)

計算式の評価では、文字列として受け取った式を数値計算に変換します。 電卓アプリやデータ処理で役立ちます。

安全で効率的な変換のコツ

型変換をより安全で効率的に行うためのベストプラクティスを学びましょう。 実際の開発で役立つ知識です。

変換前の検証を忘れずに

def validate_and_convert(value, target_type):
"""検証付きの型変換"""
if not isinstance(value, str):
return None
# 空文字列のチェック
if not value.strip():
return None
# 型に応じた変換
try:
if target_type == int:
# 整数変換前に浮動小数点数かチェック
if '.' in value:
return None
return int(value)
elif target_type == float:
return float(value)
else:
return None
except ValueError:
return None
# 使用例
test_values = ["123", "123.45", "abc", "", " ", "123.0"]
for value in test_values:
int_result = validate_and_convert(value, int)
float_result = validate_and_convert(value, float)
print(f"'{value}' -> int: {int_result}, float: {float_result}")

変換前の検証により、より安全な型変換が可能になります。 空文字列や無効な入力を事前に弾けます。

デフォルト値で安心設計

def safe_conversion(value, target_type, default=None):
"""デフォルト値付きの安全な変換"""
try:
if target_type == int:
return int(value)
elif target_type == float:
return float(value)
else:
return default
except (ValueError, TypeError):
return default
# 使用例
user_inputs = ["25", "abc", "175.5", "", None]
for input_value in user_inputs:
age = safe_conversion(input_value, int, 0)
height = safe_conversion(input_value, float, 0.0)
print(f"入力: {input_value} -> 年齢: {age}, 身長: {height}")

デフォルト値を設定すると、変換に失敗した場合の処理が簡潔になります。 プログラムが予期しない動作をすることを防げます。

まとめ:型変換をマスターして効率アップ

Python での文字列から数値への変換について、基本から実践まで詳しく解説しました。

今回学んだ重要なポイント

文字列と数値の型変換で覚えておきたいことです。

  • int()関数: 文字列を整数に変換
  • float()関数: 文字列を浮動小数点数に変換
  • エラーハンドリング: try-except文で安全な変換
  • 実践活用: CSVデータや設定ファイルの処理

型変換が活躍する場面

日常的な開発でよく使われる場面です。

  • ユーザー入力の処理: フォームやコマンドライン入力
  • ファイル読み込み: CSVやテキストファイルのデータ
  • API通信: JSON形式のデータ交換
  • 設定管理: 設定ファイルの値の変換

安全な開発のために

エラーを防ぐために心がけたいことです。

  • 事前検証: 変換前に値の妥当性をチェック
  • 例外処理: try-except文でエラーハンドリング
  • デフォルト値: 失敗時の代替値を設定
  • 型確認: type()関数で結果を確認

型変換は、データ処理において基本的で重要なスキルです。 適切なエラーハンドリングと検証を組み込むことで、堅牢なプログラムを作成できます。

まずは基本的な変換から始めて、徐々に複雑なデータ処理にもチャレンジしてみてください。 エラーハンドリングやデフォルト値の設定も活用すると、より使いやすいプログラムが作成できますよ。

ぜひ今回学んだ内容を活用して、効率的なデータ処理を実装してみてくださいね!

関連記事