Python で文字列を浮動小数点または整数に変換する方法

  1. Python で文字列を float に変換する float()
  2. Python で文字列を int に変換する int()
  3. Python で文字列を float または int に変換する ast.literal_eval
  4. Python で文字列を float に変換する際のローカライズとコンマ
  5. Python で文字列を float または int に変換するさまざまな方法のパフォーマンスの比較

このチュートリアル記事では、Python で文字列を float または int に変換する方法を紹介します。

Python で文字列を float に変換する float()

float() は、可能であれば、文字列を float ポインティング番号に変換します。

>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0

Python で文字列を int に変換する int()

int() は、与えられた文字列が整数の表現である場合、文字列を整数に変換できます。そうでなければ、ValueError を送出します。

>>> int('111')
111
>>> int('111.0')
Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    int('111.0')
ValueError: invalid literal for int() with base 10: '111.0'
>>> int('111.22222')
Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    int('111.22222')
ValueError: invalid literal for int() with base 10: '111.22222'

与えられた文字列が浮動小数点数の表現である場合、最初に文字列を float に変換し、次に int にキャストできます。

>>> int(float('111.0'))
111

Python で文字列を float または int に変換する ast.literal_eval

ast.literal_eval(string) は Python 式を含む与えられた文字列を安全に評価します。文字列を自動的に float または int に変換できます。

>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111

Python で文字列を float に変換する際のローカライズとコンマ

文字列表現にコンマ「、」が存在する場合、float 変換は ValueError 例外をスローします。ただし、コンマは、米国や英国などの「111,111.22」などの国では 1000 の区切り文字として、またはほとんどのヨーロッパ諸国では​​「111,222」などの小数点として通常使用されます。

>>> float('111,111.22')
Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    float('111,111.22')
ValueError: could not convert string to float: '111,111.22'
>>> float('111,111')
Traceback (most recent call last):
  File "<pyshell#55>", line 1, in <module>
    float('111,111')
ValueError: could not convert string to float: '111,111'

locale モジュールを使用してロケール情報を割り当てると、locale.atof() 関数は指定された文字列をロケール設定に従って float として解析できます。

米国または英国での千の区切り文字としてのカンマ

>>> import locale
>>> A = '111,111.222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(A)
111111.222
>>> locale.atof('111,111')
111111.0

適切なロケール設定が指定されている場合、カンマ「、」は正しく解釈されます。

また、指定された文字列表現が整数であっても、変換結果は常に float 型であることに注意してください。

ヨーロッパ諸国でのデミカルマークとしてのカンマ

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222

「111,222」は 111.222 に適切に変換され、「。」がオランダなどの欧州諸国では千の区切り文字として使用されるため、「111.111,222」も 111111.222 に適切に変換できます。

Python で文字列を float または int に変換するさまざまな方法のパフォーマンスの比較

timeit を使用して、さまざまなメソッド間の効率パフォーマンスを確認します。

>>> import timeint
>>> timeit.timeit('float(111.2222)', number=1000000)
0.14707240000007005
>>> timeit.timeit('ast.literal_eval("111.2222")', setup='import ast', number=1000000)
4.779956100000163
>>> timeit.timeit('locale.atof("111.2222")', setup='import locale; locale.setlocale(locale.LC_ALL, "en_US.UTF-8")', number=1000000)
6.092166299999917

上記のように、ast.literal_eval() メソッドは float メソッドよりも非常に遅くなります。Python で文字列を float または int に変換するだけの場合は、最初の選択肢ではありません。 ast.literal_eval() は、このアプリケーションでは主なターゲットが Python 式を含む文字列を評価する必要があるため、過剰に設計されています。

locale.atof() も非常に遅いため、US または UK の規則の文字列にコンマが存在する場合、またはポイント「。」は 1000 の区切り文字を意味しますが、コンマ「、」は小数点ヨーロッパ諸国で。言い換えれば、本当に必要な場合は locale.atof() を使用する必要があります。

関連記事 - Python String

  • Pythonic 方式で文字列が空であることを確認する方法
  • Python 文字列の空白を削除する方法
  • Python が文字列を日時 datetime に変換する方法
  • Python 2 および 3 で文字列を小文字に変換する方法
  • Python で文字列に部分文字列が含まれているかどうかを確認する方法
  • Python でリストを文字列に変換する方法
  • Python で 1 行ずつリストに 1つのファイルを読み取る方法
  • Python で文字列をバイトに変換する方法
  • Python で文字列に数値が含まれていることを確認する方法
  • comments powered by Disqus