我有一个看起来像是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/