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

标签 python pandas python-collections

我想将来自荷兰统计局 (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() 列是先用大写字母按字母顺序排序的吗?

帮忙,有人吗?

最佳答案

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

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

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

这应该为您提供 DataFrame,其列的顺序与 OrderedDict 中的列完全一致(通过 data.keys() 生成的列表)

关于python - pandas.DataFrame.from_dict 不使用 OrderedDict 保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752819/

相关文章:

python - 覆盖 Django 中 ChoiceField 的初始化

Python:如何跨多个间隔创建固定范围的散点图?

python - 将字符串拆分为列表并将项目转换为 int

python - 按字母顺序排列具有相同数量的元素

python - 获取 socket.gaierror : [Errno 11001] getaddrinfo failed using pyopenssl in Python 的处理错误

python - 如何使用多重处理来删除非常大的列表中的重复项?

python - 我将如何根据查找在 Pandas 中填充 NA 值?

python - pandas scatter_matrix 函数中 'ax' 关键字的用途

python - 如何检查对象的类型为 'dict_items' ?

python - 测试 collections.Mapping 是否等于其他映射或 dict