我有一個CSV文件,裏面有我想要讀入Python的數據。我得到包含字符串的列表,如"2,5"
。現在做float("2,5")
不起作用,因爲它有錯誤的小數點。轉換成小數點
如何將此內容讀入Python中作爲2.5
?
我有一個CSV文件,裏面有我想要讀入Python的數據。我得到包含字符串的列表,如"2,5"
。現在做float("2,5")
不起作用,因爲它有錯誤的小數點。轉換成小數點
如何將此內容讀入Python中作爲2.5
?
float("2,5".replace(',', '.'))
在大多數情況下
辦?如果value
是大量的和.
已用於千,您可以:
更換所有逗號爲兩點:value.replace(",", ".")
全部刪除,但最後一點:value.replace(".", "", value.count(".") -1)
使用正則表達式會更可靠
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)
如果你想(有小數大關爲例之前沒有位數)治療更復雜的情況下,我製作的正則表達式檢測以下線程中的所有類型的數字可能會對您感興趣:
如何在熊貓數據框(而不是字符串)上做到這一點? – hhh
你可以做到這一點的語言環境感知方式:
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使用此方法前一節。
還應該記住,這不會是線程安全的:http://stackoverflow.com/questions/2186327/thread-safe-locale-techniques –
Pandas支持這一開箱:
df = pd.read_csv(r'data.csv', decimal=',')
見http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
你檢查:http://pypi.python.org/pypi/Babel/0.9.6 – mouad