Pythonの数値と文字列を相互に変換する方法|str, int, float, numeric

Pythonでは、数値と文字列を連結しようとするとエラーになりますので、四則演算や連結を行うときに、数値を文字列に、文字列を数値に変換する必要があります。

ここでしっかりおさえておきましょう。

目次

1. Pythonで数値・文字列変換が必要な理由

最初に、Pythonで数値変換や文字列変換が必要な理由について解説します。

Pythonでは文字列同士、数値同士は連結することができます。

In [1]:
print('100' + '円')  #  文字列と文字列の連結はOK
print(100 +100)  #  数値と数値の連結もOK
print(100 + 100.0)  # 整数(int型)と小数(float型)の連結もOK
print(100 + 1e2)  #  整数(int型)と指数(float型)の連結もOK
100円
200
200.0
200.0

Pythonでは数値には、整数(int型)、浮動小数点(float型)、複素数(complex型)の三つがありますが、これらは全て数値ですのでお互いに連結が可能です。より詳しくは「初心者のためのPythonの数値計算」で解説しています。

しかし文字列と数値を連結しようとすると、次のようにTypeErrorになります。

In [2]:
print(100+'円')  #  数値と文字列の連結はエラー
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-04e1de2a2089> in <module>
      1 ''' 文字列と数値を連結しようとするとエラーになります。 '''
      2 
----> 3 print(100+'円')

TypeError: unsupported operand type(s) for +: 'int' and 'str'

しかし、文字列と数値を連結したいケースは多々あります。そこでPythonでは文字列を数値に変換する方法、数値を文字列に変換する方法が用意されています。

それぞれ見ていきましょう。

2. 数値を文字列に変換する(str関数)

まず数値を文字列に変換するにはstr()を使います。

In [1]:
print(str(100) + '円')
100円

さっきは、数値型の100と文字列型の’円’は連結できませんでしたが、今回はstr(100)で数値を文字列化しているので連結することができました。

オブジェクトの型を調べるtype()でも確認してみましょう。

In [2]:
print(type(100))          #  数値型(int型)
print(type(str(100)))  #  文字列型(str型)
<class 'int'>
<class 'str'>

このようにstr関数を通すと数値が文字列化されていますね。なお型やtype関数については「Pythonの型とは」で解説しています。

それでは簡単な問題です。次の文字列と数値を結合するにはどうすれば良いでしょうか。

In [3]:
''' 次の数値と文字列をstr()を使って連結してみましょう。'''
num = 3000000
str1 = '東京の人口は'
str2 = '人です。'

答えはこうですね。

In [4]:
text = str1 + str(num) + str2 
print(text)
東京の人口は3000000人です。

3. 数字の文字列を整数に変換する(int関数)

文字列の整数数字(=クオートで囲った数字)を数値に変換するにはint()を使います。

In [1]:
''' int()は文字列型の数字を整数型(int型)に変換します。'''
print(int('100'))
print(type(int('100')))
100
<class 'int'>

このようにint()にかけた文字列の整数は整数型(int型)で返されます。なお文字列の数字は半角数字でも全角数字でも構いません。

ただし、文字列型の小数をint()で整数型化しようとするとエラーになります。数値(=クオートで囲っていない数値)の小数の場合は小数点以下を切り下げて整数化します。

In [2]:
''' 小数をint関数で整数化する時は数値か文字列かで異なります。 '''
print(int(1.9))  #  数値の小数は切り下げて整数化される。
print(int('1.9'))  #  文字列の小数はエラーになる。
1
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-768b889cdef9> in <module>
      1 print(int(1.9))
----> 2 print(int('1.9'))

ValueError: invalid literal for int() with base 10: '1.9'

また位取りされているものをint関数で整数化しようとしても、文字列の数字も浮動小数点型(float型)の数値もエラーになります。

In [3]:
''' 位取りされている数値はどちらもint関数で整数変換することはできません。'''
print(int(10,000))  #  位取りされている数値
print(int('10,000'))  #  位取りされている文字列
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-dcc98d751bfd> in <module>
      1 ''' 位取りされている数値はどちらもint関数で整数変換することはできません。'''
----> 2 print(int(10,000))  #  位取りされている数値
      3 print(int('10,000'))  #  位取りされている文字列

TypeError: int() can't convert non-string with explicit base

位取りされた数字をint関数で整数化したい場合は、replace()でカンマを削除するといいです。

In [4]:
''' 位取りされた数字はreplace()で,を削除しましょう。 '''
print(int('10,000'.replace(',','')))
10000

replace()については『Pythonの文字列置換まとめ|replace, translate, re.sub, スライス』でご確認ください。

なお数字をint()で整数化する時は、第二引数に基数を入れれば2進数や8進数、16進数に変換することができます。

In [5]:
''' 2進数、8進数、16進数変換'''
print(int('10', 2))
print(int('10', 8))
print(int('10', 16))
2
8
16

10は2進数では2、8進数では8、16進数では16ですね。

4. 小数の文字列を数値に変換する(float関数)

小数の文字列を数値に変換するにはfloat()を使います。

In [1]:
''' float()は文字列型の数字を浮動小数点型(float型)に変換します。 '''
print(float('1.23'))
print(type(float('1.23')))
1.23
<class 'float'>

このようにfloat()にかけた文字列の小数は浮動小数点型(float型)に変換されます。

整数部分を省略した文字列の小数の場合は、整数部分に0が書き足されます。

In [2]:
''' 整数部分が省略された文字列型数字 '''
print(float('.12'))
0.12

整数の場合は、小数点以下一位が書き足されます。

In [3]:
''' 整数の文字列型数字も不動小数点型(float型)に変換されます。 '''
print(float('1'))
1.0

指数表記の文字列はfloat()で次のように変換されます。

In [4]:
print(float('1.23e-4'))
print(float('1.23e4'))
0.000123
12300.0

指数表記の文字列はint()ではエラーになります。指数の数値化にはfloat()を使うと覚えておきましょう。

5. 漢数字の文字列を数値に変換する(unicodedata.numeric関数)

unicodedataモジュールのunicodedata.numeric()を使うと漢数字を数値に変換することができます。モジュールについては、『Pythonのモジュールについて』で解説しています。

In [1]:
import unicodedata

print(unicodedata.numeric('一'))
print(unicodedata.numeric('五'))
print(unicodedata.numeric('十'))
print(unicodedata.numeric('百'))
print(unicodedata.numeric('億'))

print(type(unicodedata.numeric('万')))
1.0
5.0
10.0
100.0
100000000.0
<class 'float'>

このように漢数字を数値に変換することができます。なおunicodedata.numeric()の返り値は浮動小数点数型(float型)です。これはPythonは、指数は浮動小数点型(float型)として扱うからです。この点は「初心者のためのPythonの数値計算」で解説しています。

また、この関数では一字の漢数字しか変換できません。漢数字を含めたより多くの型の数字に対応する方法は以下の記事が参考になります。

6. まとめ

ここでは、数値と文字列について見てきました。Pythonでは、数値と文字列だけではなく、例えば、リストと数値、タプルと文字列など型の違うオブジェクト同士の連結はできません。

そこで、以下のようなことも同時に知っておくと、より理解が深まりますし、応用が利くようになります。

  • 変数と値をもつものをオブジェクトという(「Pythonのオブジェクトとは」)。
  • Pythonのオブジェクトには型というものがある(「Pythonの型」)。
  • Pythonでは、型の違うオブジェクト同士の四則演算はできない。
  • 型変換でよく使うのは以下のようなものでしょう。

さらに、formatメソッドを使えば、数値を自由自在に出力できるようになりますし、文字列と数値の連結をより効率的に行えるようにもなります。以下の記事で確認しておきましょう。

ぜひ、一つひとつ学習していってくださいね。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる