繁体   English   中英

pandas.DataFrame.from_dict不使用OrderedDict保留顺序

[英]pandas.DataFrame.from_dict not preserving order using OrderedDict

我想将荷兰统计局(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

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

帮忙,有人吗?

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

在创建DataFrame时尝试明确指定列顺序:

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

这应该为您的DataFrame提供与OrderedDict中的列完全相同的列(通过data.keys()生成列表)

上面的答案对我不起作用并继续给我“ValueError:不能使用columns参数和orient ='columns'”。

后来我通过以下方式找到了解决方案并且工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM