我从网上网页下载了一个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:
可能您的一个字符(例如“.”)看起来像您想要的字符,但实际上在检查代码表时是另一个字符。
你可以通过写
并将得到的值与unicode代码页进行比较。小数点应该是46(
print ord(u'.')
),数字应该在48..57之间。另一个想法是:您检查了
a
的类型吗?也许它不是unicode对象,而是更复杂的对象。你可以试试float(unicode(a))
。这个怎么样?
结果:
所以问题似乎是“value”标记字段中的值。“批准”和“不批准”下的值标记中的最后6个条目为空。所以当试图把它们转换成浮点数时,系统给出了一个错误。通过如下调整迭代以省略这些值,代码运行良好。在这种情况下,需要关注整个数据集,而不是泛化。感谢大家的投入。
相关问题 更多 >
编程相关推荐