34

Pythonに読み込みたいデータを読み取るCSVファイルがあります。のような文字列を含むリストを取得します"2,5"float("2,5")小数点が間違っているため、実行は機能しません。

これをPythonに読み取るにはどうすればよい2.5ですか?

4

7 に答える 7

65

ロケールを意識した方法でそれを行うことができます:

import locale

# Set to users preferred locale:
locale.setlocale(locale.LC_ALL, '')
# Or a specific locale:
locale.setlocale(locale.LC_NUMERIC, "en_DK.UTF-8")

print locale.atof("3,14")

この方法を使用する前に、このセクションをお読みください。

于 2011-08-18T11:40:48.410 に答える
30

float("2,5".replace(',', '.'))ほとんどの場合

valueが多数で、数千回使用されている場合は.、次のことができます。

ポイントのすべてのコンマを置き換えます。value.replace(",", ".")

最後のポイントを除くすべてを削除します。value.replace(".", "", value.count(".") -1)

于 2011-08-18T11:09:42.810 に答える
26

Pandasはこれをすぐにサポートします。

df = pd.read_csv(r'data.csv', decimal=',')

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.htmlを参照してください

于 2015-12-16T15:03:40.423 に答える
8

正規表現を使用すると、より信頼性が高くなります

import re

decmark_reg = re.compile('(?<=\d),(?=\d)')

ss = 'abc , 2,5 def ,5,88 or (2,5, 8,12, 8945,3 )'

print ss
print decmark_reg.sub('.',ss)

結果

abc , 2,5 def ,5,88 or (2,5, 8,12, 8945,3 )
abc , 2.5 def ,5.88 or (2.5, 8.12, 8945.3 )

より複雑なケース(たとえば、小数点の前に数字がない数字)を処理したい場合は、次のスレッドですべてのタイプの数字を検出するために作成した正規表現が役立ちます。

stackoverflow.com/questions/5917082/regular-expression-to-match-numbers-with-or-without-commas-and-decimals-in-text/5929469

于 2011-08-18T11:32:07.723 に答える
4

まず、番号を提供するために使用されたロケールを確認する必要があります。このランダムな問題を実行しないと、確実に発生します。

import locale

loc = locale.getlocale()  # get and save current locale
# use locale that provided the number;
# example if German locale was used:
locale.setlocale(locale.LC_ALL, 'de_DE')
pythonnumber = locale.atof(value)
locale.setlocale(locale.LC_ALL, loc)  # restore saved locale
于 2018-12-22T22:28:31.270 に答える
3

すべての小数点コンマを小数点ドットに置き換えてみてください。

floatAsStr = "2,5"
floatAsStr = floatAsStr.replace(",", ".");
myFloat = float(floatAsStr)

replaceもちろん、Pythonはcharとstringを区別するようになったため、この関数は任意のサブ文字列で機能します。

于 2011-08-18T11:12:47.103 に答える
0

ドットが千の区切り記号として使用されている場合、コンマとドットを交換するには、次のように3番目の記号を一時的なプレースホルダーとして使用できます。

value.replace('.', '#').replace(',', '.').replace('#', ',')

しかし、文字列からfloatに変換したいので、ドットを削除してから、コンマをドットに置き換えることができます。

float(value.replace('.', '').replace(',', '.'))

IMOこれは最も読みやすいソリューションです

于 2021-01-29T13:45:00.640 に答える