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