pandas.DataFrame.from_dict no conserva el orden usando OrderedDict

Quiero importar fonts de datos XML OData de la Oficina de Estadísticas de Holanda (CBS) en nuestra base de datos. Usando lxml y pandas pensé que esto debería ser directo. Al usar OrderDict quiero preservar el orden de las columnas para facilitar la lectura, pero de alguna manera no puedo hacerlo bien.

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 

Al inspeccionar los data , el OrderDict está en el orden correcto. ¿Pero mirando df.head() las columnas se han ordenado alfabéticamente con CAPS primero?

Ayuda, alguien?

Algo en tu ejemplo parece ser inconsistente, ya que los data son una list y no un dict , pero suponiendo que realmente tienes un OrderedDict :

Intente especificar explícitamente el orden de sus columnas cuando cree su DataFrame:

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

Esto debería proporcionarle su DataFrame con las columnas ordenadas exactamente de la forma en que están en OrderedDict (a través de la lista generada por data.keys() )