pandas.DataFrame.from_dict不使用OrderedDi保存订单

2024-04-26 23:37:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从荷兰统计局(CBS)将OData XML数据源导入我们的数据库。使用lxml和pandas,我认为这应该是straigtforward。通过使用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

检查data,OrderDict的顺序是正确的。但看看df.head()这些列是按字母顺序排列的,首先是大写字母?

有人帮忙吗?


Tags: fromimportpandasdfdata顺序rootelement
2条回答

示例中的某些内容似乎不一致,因为data是一个list,而不是dict,但假设您确实有一个OrderedDict

创建数据帧时尝试显式指定列顺序:

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

这将为您提供数据帧,其中列的顺序与OrderedDict中列的顺序完全相同(通过data.keys()生成的列表)

上面的答案对我不起作用,并一直给我“ValueError:cannot use columns parameter with orient=”columns“。

后来,我找到了一个解决方案,我做了如下工作:

df = pd.DataFrame.from_dict (dict_data) [list (dict_data[0].keys())]

相关问题 更多 >