我有一个包含数据读取的CSV文件,我想读入Python。我得到包含"2,5"
等字符串的列表。现在做float("2,5")
不起作用,因为它有错误的小数点。
如何将此作为2.5
读入Python?
答案 0 :(得分: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")
在使用此方法之前阅读this部分。
答案 1 :(得分:22)
float("2,5".replace(',', '.'))
在大多数情况下会这样做
如果value
是一个很大的数字而.
已被用于数千,您可以:
替换点的所有逗号:value.replace(",", ".")
删除除最后一点之外的所有内容:value.replace(".", "", value.count(".") -1)
答案 2 :(得分:16)
Pandas支持开箱即用:
df = pd.read_csv(r'data.csv', decimal=',')
请参阅http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
答案 3 :(得分:6)
使用正则表达式会更可靠
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 )
如果你想处理更复杂的情况(例如小数点之前没有数字的数字),我可能会对你感兴趣的正则表达式检测以下线程中所有类型的数字:
答案 4 :(得分:3)
尝试用小数点替换所有小数点逗号:
floatAsStr = "2,5"
floatAsStr = floatAsStr.replace(",", ".");
myFloat = float(floatAsStr)
函数replace
当然适用于任何子字符串,因为python现在可以区分char和string。
答案 5 :(得分:2)
首先,您必须确保使用哪种语言环境提供号码。如果不这样做,肯定会出现随机问题。
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
答案 6 :(得分:0)
如果点用作千位分隔符,要交换逗号和点,您可以使用第三个符号作为临时占位符,如下所示:
value.replace('.', '#').replace(',', '.').replace('#', ',')
但是如果您想从字符串转换为浮点数,您可以删除任何点,然后用点替换任何逗号
float(value.replace('.', '').replace(',', '.'))
IMO 这是最易读的解决方案