0

オンライン Web ページから xml 形式のデータ セットをダウンロードしました。Pythonのパターンライブラリを使用してvaluesタグを抽出しました。これにより、ユニコード値が得られます。

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:
4

3 に答える 3

6

コード表を確認すると、1 つの文字 (「.」など) が使用したい文字のように見えても、実際には別の文字である可能性があります。

書くことですべてのコードを印刷できます

for c in a:
    print ord(c)

取得した値を Unicode コードページと比較します。小数点は 46 ( print ord(u'.')) で、数字は 48..57 の範囲である必要があります。

もう1つの考え:のタイプを確認しましたaか?Unicode オブジェクトではなく、もっと複雑なものかもしれません。あなたはfloat(unicode(a))それを試すことができます。

于 2013-10-10T04:07:40.007 に答える
1

したがって、問題は「値」タグ フィールドの値にあるようです。「承認」および「非承認」の下の値タグの最後の 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)
于 2013-10-13T11:31:17.427 に答える