将字典列表解压缩到 Pandas 中的单独列中
Unpack list of dictionary into separate columns in Pandas
假设我有这样结构的数据:
{
"_id" : 245,
"connId" : "3r34b32",
"roomList" : [
{
"reportId" : 29,
"siteId" : 1
}]
}
如何从列表中的字典中获取键以及值,以便它具有下面的预期输出。
预期输出:
ID,connID,reportId,siteId
245,3r34b32,29,1
我正在使用 json_normalize
但这不适用于列表,因此我需要添加一些额外的代码来解压缩包含字典的列表。
我们将不胜感激。
您有嵌套记录。您可以使用 record_path
单独处理它们,并将它们与 pd.concat()
连接起来
root = pd.json_normalize(d).drop('roomList',1)
nested = pd.json_normalize(d, record_path='roomList')
output = pd.concat([root, nested],axis=1)
print(output)
_id connId reportId siteId
0 245 3r34b32 29 1
没有显式列名的方法
如果您不想明确指定列名,您可以执行以下操作。这将检查规范化后的哪些列是嵌套的,分别对它们进行规范化并连接所有这些列。为了示例,我添加了另一个嵌套 JSON -
root = pd.json_normalize(d)
nested_cols = [i for i in root.columns if isinstance(root[i][0], list)]
l = [root.drop(nested_cols,1),]
for i in nested_cols:
l.append(pd.json_normalize(d, record_path=i))
output = pd.concat(l, axis=1)
print(output)
_id connId reportId siteId reportId2 siteId2
0 245 3r34b32 29 1 39 5
注意: 如果您的某些嵌套记录具有相同的名称,您可能希望在规范化它们时使用一些前缀。 Check this了解更多详情。
假设我有这样结构的数据:
{
"_id" : 245,
"connId" : "3r34b32",
"roomList" : [
{
"reportId" : 29,
"siteId" : 1
}]
}
如何从列表中的字典中获取键以及值,以便它具有下面的预期输出。
预期输出:
ID,connID,reportId,siteId
245,3r34b32,29,1
我正在使用 json_normalize
但这不适用于列表,因此我需要添加一些额外的代码来解压缩包含字典的列表。
我们将不胜感激。
您有嵌套记录。您可以使用 record_path
单独处理它们,并将它们与 pd.concat()
root = pd.json_normalize(d).drop('roomList',1)
nested = pd.json_normalize(d, record_path='roomList')
output = pd.concat([root, nested],axis=1)
print(output)
_id connId reportId siteId
0 245 3r34b32 29 1
没有显式列名的方法
如果您不想明确指定列名,您可以执行以下操作。这将检查规范化后的哪些列是嵌套的,分别对它们进行规范化并连接所有这些列。为了示例,我添加了另一个嵌套 JSON -
root = pd.json_normalize(d)
nested_cols = [i for i in root.columns if isinstance(root[i][0], list)]
l = [root.drop(nested_cols,1),]
for i in nested_cols:
l.append(pd.json_normalize(d, record_path=i))
output = pd.concat(l, axis=1)
print(output)
_id connId reportId siteId reportId2 siteId2
0 245 3r34b32 29 1 39 5
注意: 如果您的某些嵌套记录具有相同的名称,您可能希望在规范化它们时使用一些前缀。 Check this了解更多详情。