2013-10-09 97 views
0

我已經從網上下載的在線網頁XML格式的數據集。我已經使用python的模式庫提取了值標記。這給了我unicode值。無法轉換爲Unicode數據漂浮

我期待這個轉換Unicode數字,像u'63.3' 到浮點數。我曾嘗試做float(a),但它給出了錯誤消息。

import numpy as np 
import pandas as pd 
import requests 
from pattern import web 

xml = requests.get('http://charts.realclearpolitics.com/charts/1044.xml').text 
dom = web.Element(xml) 
values = dom.by_tag('value') 

date= [] 
approve = [] 
disapprove = [] 

values = dom.by_tag('value') 
for i in range(0,1724): 
    date.append(pd.to_datetime(values[i].content)) 

for i in range(1724,3448): 
    a = float(values[i].content) 
    approve.append(a) 

for i in range(3448,5172): 
    a = float(values[i].content) 
    disapprove.append(a) 

finalresult = pd.DataFrame({'date': date, 'Approve': approve, 'Disapprove': disapprove}) 
finalresult 

輸出如下:

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-12-d9d9e580d883> in <module>() 
     9 
    10 for i in range(1724,3448): 
---> 11  a = float(values[i].content) 
    12  result['Approve'].append(a) 
    13 
    ValueError: could not convert string to float: 
+0

這似乎是爲我工作... http://repl.it/LUj – Lix

+0

'浮動(u'63.3' )'不給錯誤。 – user278064

+5

如果你想有一個浮動的,爲什麼你會嘗試'INT()'? – unwind

回答

2

這個怎麼樣?

float(u'63.3') 

結果:

63.3 
+1

OP已經聲明他們已經嘗試過......所以爲什麼要將它作爲答案發布? – Lix

6

這可能是可能是你的角色之一(如「」)看起來想要的字符有,但實際上是另一種當檢查代碼表時。

您可以通過編寫

for c in a: 
    print ord(c) 

打印所有代碼和你比較會用Unicode代碼頁得到的值。小數點應該是46(print ord(u'.')),數字應該在48..57的範圍內。

另外一個想法:你檢查a類型?也許它不是一個unicode對象,但更復雜一些。那麼你可以試試float(unicode(a))

1

所以,問題似乎是與在「價值」標籤字段中的值。 「Approve」和「Disapprove」下價值標籤中的最後6個條目是空白的。所以,當試圖將它們轉換爲浮動時,系統給出了一個錯誤。通過調整迭代來省略這些值,代碼運行良好。在這種情況下,需要關注整個數據集而不是概括性的。感謝所有的投入。

#The last range number below is 1720 instead of 1727 as last 6 values of Approve & Disapprove tag are blank. 
for i in range(0,1720): 
    date.append(pd.to_datetime(values[i].content)) 

#The last range number below is 3447 instead of 3454 as last 6 values are blank. Including till 3454 will give error while converting to float. 
for i in range(1727,3447): 
    a = float(values[i].content) 
    approve.append(a) 

#The last range number below is 5174 instead of 5181 as last 6 values are blank. 
for i in range(3454,5174): 
    a = float(values[i].content) 
    disapprove.append(a)