Подтвердить что ты не робот

Pandas.DataFrame.from_dict не сохраняет порядок, используя OrderedDict

Я хочу импортировать данные Data Data из OData из голландского бюро статистики (CBS) в нашу базу данных. Используя 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(), столбцы сначала отсортированы в алфавитном порядке с помощью CAPS?

Помогите, кто-нибудь?

4b9b3361

Ответ 1

Что-то в вашем примере кажется непоследовательным, поскольку data - это list и no dict, но при условии, что у вас действительно есть OrderedDict:

Попробуйте явно указать порядок столбцов при создании DataFrame:

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

Это должно дать вам ваш DataFrame с столбцами, упорядоченными точно так же, как они находятся в OrderedDict (через data.keys() сгенерированный список)

Ответ 2

Вышеприведенный ответ не работает для меня и продолжает давать мне "ValueError: нельзя использовать параметр columns с orient = 'columns'".

Позже я нашел решение, сделав это ниже, и работал:

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