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

胡金庫 2023年1月30日
  1. Python で文字列を float に変換する float()
  2. Python で文字列を int に変換する int()
  3. Python で文字列を float または int に変換する ast.literal_eval
  4. Python で文字列を float に変換する際のローカライズとコンマ
  5. Python で文字列を float または int に変換するさまざまな方法のパフォーマンスの比較
Python で文字列を浮動小数点または整数に変換する方法

このチュートリアル記事では、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,222111.222 に適切に変換され、がオランダなどの欧州諸国では千の区切り文字として使用されるため、111.111,222111111.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() を使用する必要があります。

著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - Python String