微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将字典列表解压缩到 Pandas 中的单独列中 没有明确列名的方法

如何解决将字典列表解压缩到 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 了解更多详情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。