Python:将 OrderedDicts 的 OrderedDict 解析为 Pandas Dataframe

Python: Parsing OrderedDict of OrderedDicts into Pandas Dataframe

我有一个看起来像 OrderdDict 的东西,其中包含我所指的 'main' OrderedDict 的子集内的 OrderedDict。我正在尝试将此对象解析为 Pandas DataFrame。 (我正在使用 Python 3,Anaconda 发行版。)

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

正如您在下面的示例中看到的,我关心的 OrderedDicts 嵌套在 'main' 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', 'billbob@foo.com')]), OrderedDict([('attributes', OrderedDict([('type', 'Cust'), ('url', '/example/url/foo/bar/234')])), ('Id', 'KJ23jdkd889DKJD'), ('Phone', '(444) 444-4444'), ('FirstName', 'Amanda'), ('LastName', 'Smith'), ('Email', 'amanda.smith@bar.com')]), OrderedDict([('attributes', OrderedDict([('type', 'Cust'), ('url', '/example/url/foo/bar/654')])), ('Id', '23kkjKJkj2323KJ33'), ('Phone', '(555) 555-5555'), ('FirstName', 'Julie'), ('LastName', 'jackson'), ('Email', 'jjackson@test.com')])])])

...并获得包含列 'Id'、'Phone'、'FirstName'、'LastName' 和 'Email'.[=14= 的 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)