Pythonプログラムにおける文字列から数値(整数や浮動小数点数)へのデータ型変換について解説します。
整数や浮動小数点数から文字列へのデータ型変換については「Python入門 数値から文字列にデータ型を変換する」をご覧ください。
文字列から数値にデータ型を変換する理由
まずは次のソースコードをご覧ください。このソースコードを実行すると3行目でエラー(TypeError)となってしまいます。
a = "100" # これは文字列
b = 100 # これは数値
c = a + b # ここでエラーとなる
print(c)
変数 a に代入した値「”100″」は、数値のように見えますが、実際は数字の文字列です。変数 b に代入した値「100」は、数値です。Pythonは文字列と数値の計算はできません。
文字列のままでは算術演算が行えないため、データ型を「文字列(str)」から「整数(int)」または「浮動小数点数(float)」に変換する必要があるのです。
オブジェクトとデータ型については「Python入門 オブジェクトとデータ型」も参考にしてみてください。
文字列(str)から整数(int)にデータ型を変換する方法
文字列(str)から整数(int)へのデータ型変換には「int()」を使用します。コマンドプロンプトに実行結果を表示する場合は「int()」の外側を「print()」で囲みます。
print(int("100"))
サンプルプログラム(ソースコード)
変数 a に代入した文字列「”100″」を「int(a)」で整数にデータ型変換し、変数 b に代入した整数「100」と加算した値を変数 c に代入する足し算プログラムです。
いくつか「type()」を使いデータ型や「id()」を使いオブジェクトIDを「print()」で表示させています。データ型が変換されたか、オブジェクト(値)は同じものなのか、などを確認するためです。
a = "100"
b = 100
c = int(a) + b
print(c)
# int(a) のデータ型を確認
print(type(int(a)))
# 変数 a のデータ型を確認
print(type(a))
# int(a) と 変数 a のオブジェクトIDを確認
print(id(a)) # 変数 a
print(id(int(a))) # int(a)
a = int(a)
# 再代入後の 変数 a のデータ型を確認
print(type(a))
# 変数 a のオブジェクトIDを確認
print(id(a)) # 変数 a
変数の定義と代入については「Python入門 変数の定義と代入および変数名の付け方」も参考にしてみてください。
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_027.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると、変数 a を「int(a)」で整数にデータ型を変換して算術演算(加算)ができるようにしてから、変数 b と加算しています。実行結果を見ると2行目に「200」と表示されています。
ここで注目してほしいところは、実行結果の3・4・7行目のデータ型と5・6・8行目のオブジェクトIDです。
まずデータ型ですが「int(a)」では変数 a のデータ型は変わりません。「int(a)」を実行すると「int(a)」と紐づく値のデータ型は「<class ‘int’>」(整数)となります。しかし、変数 a と紐づく値のデータ型は「<class ‘str’>」(文字列)のままです。
次にオブジェクトIDですが「int(a)」では変数 a と紐づく値は変わりません。変数 a と「int(a)」は異なるオブジェクトIDとなっています。つまり、変数 a と「int(a)」は別の値と紐づいているということです。
変数 a の値を文字列(str)から整数(int)にしたいなら「a = int(a)」のように変数 a に「int(a)」を再代入します。再代入すると変数と値の紐づけが変わります。すると実行結果の7行目のように整数(int)となり8行目のように「int(a)」と同じオブジェクトIDとなります。
(trial) C:\code\py310\venv\trial>python sample_code_027.py
200 ← print(c)
<class 'int'> ← print(type(int(a)))
<class 'str'> ← print(type(a))
1952640337904 ← print(id(a))
1952635096400 ← print(id(int(a)))
<class 'int'> ← print(type(a))
1952635096400 ← print(id(a))
(trial) C:\code\py310\venv\trial>
「id()」で表示したオブジェクトIDの数字(識別値)はプログラムを実行するたびに変わるため上記の例とは数字が異なります。
文字列(str)から浮動小数点数(float)にデータ型を変換する方法
文字列(str)から浮動小数点数(float)へのデータ型変換には「float()」を使用します。コマンドプロンプトに実行結果を表示する場合は「float()」の外側を「print()」で囲みます。
print(float("100"))
サンプルプログラム(ソースコード)
変数 a に代入した文字列「“100”」を「float(a)」で浮動小数点数にデータ型変換し、変数 b に代入した整数「100」と加算した値を変数 c に代入する足し算プログラムです。
a = "100"
b = 100
c = float(a) + b
print(c)
# float(a) のデータ型を確認
print(type(float(a)))
# 変数 a のデータ型を確認
print(type(a))
# 変数 b のデータ型を確認
print(type(b))
# float(a) と 変数 a のオブジェクトIDを確認
print(id(a)) # 変数 a
print(id(float(a))) # float(a)
a = float(a)
# 再代入後の 変数 a のデータ型を確認
print(type(a))
# 変数 a のオブジェクトIDを確認
print(id(a)) # 変数 a
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_028.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると、変数 a を「float(a)」で浮動小数点数にデータ型を変換して算術演算(加算)ができるようにしてから、変数 b と加算しています。実行結果を見ると2行目に「200.0」と表示されています。
(trial) C:\code\py310\venv\trial>python sample_code_028.py
200.0 ← print(c)
<class 'float'> ← print(type(float(a)))
<class 'str'> ← print(type(a))
<class 'int'> ← print(type(b))
2402251835376 ← print(id(a))
2402251561616 ← print(id(float(a)))
<class 'float'> ← print(type(a))
2402251561616 ← print(id(a))
(trial) C:\code\py310\venv\trial>
整数と浮動小数点数は同じ数値型なので算術演算可能です。
まとめ
- Pythonは文字列と数値の計算ができないため文字列を整数または浮動小数点数に変換する必要がある
- 文字列(str)から整数(int)へのデータ型変換には「int()」を使用する
- 文字列(str)から浮動小数点数(float)へのデータ型変換には「float()」を使用する
- 「int()」や「float()」では変数のデータ型は変わらない
- 「int()」や「float()」では変数と紐づく値は変わらない
- 変数の値を文字列から整数や浮動小数点数に変えるには再代入が必要となる