python - 在 Pandas 中分解和解包列
问题描述
假设我有一个具有以下结构的数据,如何分解包含列表的列然后解压缩分解的列?
资源:
d = {
"_id" : "5f2",
"connId" : 128,
"hospitalList" : [
{
"hospitalId" : 29,
"boardId" : 1019,
"siteId" : 1
},
{
"hospitalId" : 3091,
"boardId" : 2163,
"siteId" : 382
},
{
"hospitalId" : 28,
"boardId" : 1017,
"siteId" : 5
}]
}
代码:
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 hospitalId boardId siteId
0 5f2 128.0 29 1019 1
1 NaN NaN 3091 2163 382
2 NaN NaN 28 1017 5
预期结果:
_id connId hospitalId boardId siteId
0 5f2 128.0 29 1019 1
1 5f2 128.0 3091 2163 382
2 5f2 128.0 28 1017 5
解决方案
这会输出你想要的。
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)
output.fillna(method='ffill', inplace=True)
不过,不幸的是,我不知道您将在哪种情况下使用该代码,和/或您是否必须进行调整。
推荐阅读
- python - sklearn 自定义变压器拟合问题
- ios - 来自委托方法的值传递是 nil Swift
- mysql - MySQL表更新后获取受影响行的数据
- django - django 应用程序的 VScode unittest 测试发现设置
- java - 如何在 IRIS Sql 中使用 %MATCHES 进行正则表达式
- node.js - 针对这种特定情况在 EJS 中注入变量
- amazon-web-services - Aws cloudformation join 和 sub 在一起
- android - RecyclerView.Adapter。重写的方法 onCreateViewHolder 参数在 viewType 参数中始终为零
- linux - 具有世界可写权限的 docker tmpfs
- javascript - 在树视图节点列表中按 ID 查找项目