我有一个看起来像是OrderedDict的东西,其中包含OrderedDict,而这是我所谓的“主要” OrderedDict的子集。我正在尝试将此对象解析为Pandas DataFrame。 (我正在使用Python 3,Anaconda发行版。)

我搜索并找到了一些有关理解此类数据结构的示例,但示例中的结构似乎与我的不匹配。

在下面的示例中可以看到,我关心的OrderedDicts嵌套在“主要” OrderedDict内名为“ records”的键中。我想举以下例子:

od = OrderedDict([('totalSize', 3), ('done', True), ('records', [OrderedDict([('attributes', OrderedDict([('type', 'Cust'), ('url', '/example/url/foo/bar/123')])), ('Id', '4563456kjgfu4uyHHY3'), ('Phone', None), ('FirstName', 'Bill'), ('LastName', 'Bob'), ('Email', '[email protected]')]), OrderedDict([('attributes', OrderedDict([('type', 'Cust'), ('url', '/example/url/foo/bar/234')])), ('Id', 'KJ23jdkd889DKJD'), ('Phone', '(444) 444-4444'), ('FirstName', 'Amanda'), ('LastName', 'Smith'), ('Email', '[email protected]')]), OrderedDict([('attributes', OrderedDict([('type', 'Cust'), ('url', '/example/url/foo/bar/654')])), ('Id', '23kkjKJkj2323KJ33'), ('Phone', '(555) 555-5555'), ('FirstName', 'Julie'), ('LastName', 'jackson'), ('Email', '[email protected]')])])])

...并获得包含“ Id”,“ Phone”,“ FirstName”,“ LastName”和“ Email”列的DataFrame。

到目前为止,我已经能够提取我认为是列表的列表:

li = []
list1 = [(record['Id'], record['Phone'],record['FirstName'],record['LastName'])
for record in od['records']]
li.append(list1)
li[:]


但是,此列表策略列表忽略了列名的可能性。我想请问您的帮助,这是将方法的最后一步纳入Pandas DataFrame的过程。

提前非常感谢您。

最佳答案

我不熟悉Pandas DataFrame,但是构建列表字典似乎是正确的选择。

# Attributes of interest
attrs = ['Id', 'Phone', 'FirstName', 'LastName', 'Email']
records = od['records']

data = {}

for rec in records:
    for k in attrs:
        # setdefault initializes the array for key if necessary
        data.setdefault(k, []).append(rec[k])

dframe = pandas.DataFrame(data)

print(dframe)


无需指定字段的解决方案。尽管未指定attributes的处理方式,但可以忽略它,尽管它可能像其他方式一样处理。

records = od['records']
data = {}

for rec in records:
    for k, v in rec.items():
        if k == 'attributes':
            continue
        data.setdefault(k, []).append(v)

dframe = pandas.DataFrame(data)
print(dframe)

关于python - Python:将OrderedDicts的OrderedDict解析为Pandas Dataframe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34804458/

10-12 22:21