Pythonに読み込みたいデータを読み取るCSVファイルがあります。のような文字列を含むリストを取得します"2,5"
。float("2,5")
小数点が間違っているため、実行は機能しません。
これをPythonに読み取るにはどうすればよい2.5
ですか?
Pythonに読み込みたいデータを読み取るCSVファイルがあります。のような文字列を含むリストを取得します"2,5"
。float("2,5")
小数点が間違っているため、実行は機能しません。
これをPythonに読み取るにはどうすればよい2.5
ですか?
ロケールを意識した方法でそれを行うことができます:
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")
この方法を使用する前に、このセクションをお読みください。
float("2,5".replace(',', '.'))
ほとんどの場合
value
が多数で、数千回使用されている場合は.
、次のことができます。
ポイントのすべてのコンマを置き換えます。value.replace(",", ".")
最後のポイントを除くすべてを削除します。value.replace(".", "", value.count(".") -1)
Pandasはこれをすぐにサポートします。
df = pd.read_csv(r'data.csv', decimal=',')
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.htmlを参照してください
正規表現を使用すると、より信頼性が高くなります
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 )
より複雑なケース(たとえば、小数点の前に数字がない数字)を処理したい場合は、次のスレッドですべてのタイプの数字を検出するために作成した正規表現が役立ちます。
まず、番号を提供するために使用されたロケールを確認する必要があります。このランダムな問題を実行しないと、確実に発生します。
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
すべての小数点コンマを小数点ドットに置き換えてみてください。
floatAsStr = "2,5"
floatAsStr = floatAsStr.replace(",", ".");
myFloat = float(floatAsStr)
replace
もちろん、Pythonはcharとstringを区別するようになったため、この関数は任意のサブ文字列で機能します。
ドットが千の区切り記号として使用されている場合、コンマとドットを交換するには、次のように3番目の記号を一時的なプレースホルダーとして使用できます。
value.replace('.', '#').replace(',', '.').replace('#', ',')
しかし、文字列からfloatに変換したいので、ドットを削除してから、コンマをドットに置き換えることができます。
float(value.replace('.', '').replace(',', '.'))
IMOこれは最も読みやすいソリューションです