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()
列是否已按字母顺序排序,首先使用 CAPS?
有人帮忙吗?
您的示例中的某些内容似乎不一致,因为 data
是 list
而不是 dict
,但假设您确实有 OrderedDict
:
尝试在创建 DataFrame 时明确指定列顺序:
# ... all your data collection
df = pd.DataFrame(data, columns=data.keys())
这应该会为您提供 DataFrame,其中列的顺序与它们在 OrderedDict 中的顺序完全相同(通过 data.keys()
生成的列表)
以上答案对我不起作用,继续给我 "ValueError: cannot use columns parameter with orient='columns'"。
后来我通过下面的操作找到了解决方案并成功了:
df = pd.DataFrame.from_dict (dict_data) [list (dict_data[0].keys())]
我想将来自荷兰统计局 (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()
列是否已按字母顺序排序,首先使用 CAPS?
有人帮忙吗?
您的示例中的某些内容似乎不一致,因为 data
是 list
而不是 dict
,但假设您确实有 OrderedDict
:
尝试在创建 DataFrame 时明确指定列顺序:
# ... all your data collection
df = pd.DataFrame(data, columns=data.keys())
这应该会为您提供 DataFrame,其中列的顺序与它们在 OrderedDict 中的顺序完全相同(通过 data.keys()
生成的列表)
以上答案对我不起作用,继续给我 "ValueError: cannot use columns parameter with orient='columns'"。
后来我通过下面的操作找到了解决方案并成功了:
df = pd.DataFrame.from_dict (dict_data) [list (dict_data[0].keys())]