我从在线网页下载了xml格式的数据集。我使用python的模式库提取了values标签。这给了我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 :(得分:6)
您的某个角色(例如“。”)可能看起来像您想拥有的角色,但实际上在检查代码表时是另一个角色。
您可以通过书写
打印所有代码for c in a:
print ord(c)
并将您获得的值与unicode代码页进行比较。小数点应为46(print ord(u'.')
),数字应在48..57。
另一个想法:你检查过a
的类型了吗?也许它不是unicode对象,而是更复杂的东西。您可以尝试float(unicode(a))
,然后。
答案 1 :(得分:2)
怎么样?
float( u'63.3')
结果:
63.3
答案 2 :(得分:1)
所以问题似乎与'value'标记字段中的值有关。 “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)