Til*_*l B 28 python locale decimal-point
我有一个包含数据读取的CSV文件,我想读入Python.我得到包含字符串的列表"2,5"
.现在做的float("2,5")
不起作用,因为它有错误的小数点.
我如何将其作为Python阅读2.5
?
Lau*_*low 55
您可以使用区域设置识别方式:
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")
Run Code Online (Sandbox Code Playgroud)
在使用此方法之前,请阅读本节.
eum*_*iro 23
float("2,5".replace(',', '.'))
在大多数情况下会这样做
如果value
是一个很大的数字,.
已经使用了数千,你可以:
替换点的所有逗号: value.replace(",", ".")
除去最后一点之外的所有内容: value.replace(".", "", value.count(".") -1)
mag*_*gie 19
熊猫支持这种开箱即用:
df = pd.read_csv(r'data.csv', decimal=',')
Run Code Online (Sandbox Code Playgroud)
见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)
Run Code Online (Sandbox Code Playgroud)
结果
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 )
Run Code Online (Sandbox Code Playgroud)
如果你想处理更复杂的情况(例如小数点之前没有数字的数字),我在下面的线程中检测所有类型的数字的正则表达可能对你有用: