24

オランダ統計局 (CBS) からの OData XML データフィードをデータベースにインポートしたいと考えています。lxml と pandas を使用して、これは簡単だと思いました。OrderDict を使用して、読みやすくするために列の順序を保持したいのですが、どういうわけか正しくできません。

from collections import OrderedDict
from lxml import etree
import requests
import pandas as pd


# CBS URLs
base_url = 'http://opendata.cbs.nl/ODataFeed/odata'
datasets = ['/37296ned', '/82245NED']

feed = requests.get(base_url + datasets[1] + '/TypedDataSet')
root = etree.fromstring(feed.content)

# all record entries start at tag m:properties, parse into data dict
data = []
for record in root.iter('{{{}}}properties'.format(root.nsmap['m'])):
    row = OrderedDict()
    for element in record:
        row[element.tag.split('}')[1]] = element.text
    data.append(row)

df = pd.DataFrame.from_dict(data)
df.columns

を調べると、 OrderDictdataは正しい順序になっています。しかしdf.head()、列を見ると、最初に CAPS でアルファベット順にソートされていますか?

誰か助けて?

4

2 に答える 2

38

dataalistと no のように、あなたの例の何かが矛盾しているように見えますdictが、実際にはOrderedDict:

DataFrame を作成するときに、列の順序を明示的に指定してみてください。

# ... all your data collection
df = pd.DataFrame(data, columns=data.keys())

data.keys()これにより、(生成されたリストを介して) OrderedDict にあるのとまったく同じように列が並べられた DataFrame が得られます。

于 2015-11-17T14:02:27.447 に答える