python - 将具有相同键的字典列表转换为高数据框
问题描述
数据框有一列包含具有相同键名的字典列表。如何将其转换为高数据框?数据框如图所示。
A B
1 [{"name":"john","age":"28","salary":"50000"},{"name":"Todd","age":"36","salary":"54000"}]
2 [{"name":"Alex","age":"48","salary":"70000"},{"name":"Mark","age":"89","salary":"150000"}]
3 [{"name":"jane","age":"36","salary":"20000"},{"name":"Rose","age":"28","salary":"90000"}
如何将以下数据框转换为以下数据框
A name age salary
1 john 28 50000
1 Todd 36 54000
2 Alex 48 70000
2 Mark 89 150000
3 jane 36 20000
3 Rose 28 90000
解决方案
那么,您首先要使用我之前提供的相同方法来寻找unesting 。
newdf=unnesting(df,['B'])
pd.concat([newdf,pd.DataFrame(newdf.pop('B').tolist(),index=newdf.index)],axis=1)
A age name salary
0 1 28 john 50000
0 1 36 Todd 54000
1 2 48 Alex 70000
1 2 89 Mark 150000
2 3 36 jane 20000
2 3 28 Rose 90000
更多信息我附上了我的自定义功能,你也可以在我链接的页面中找到它
def unnesting(df, explode):
idx=df.index.repeat(df[explode[0]].str.len())
df1=pd.concat([pd.DataFrame({x:np.concatenate(df[x].values)} )for x in explode],axis=1)
df1.index=idx
return df1.join(df.drop(explode,1),how='left')
数据输入
df.B.to_dict()
{0: [{'name': 'john', 'age': '28', 'salary': '50000'}, {'name': 'Todd', 'age': '36', 'salary': '54000'}], 1: [{'name': 'Alex', 'age': '48', 'salary': '70000'}, {'name': 'Mark', 'age': '89', 'salary': '150000'}], 2: [{'name': 'jane', 'age': '36', 'salary': '20000'}, {'name': 'Rose', 'age': '28', 'salary': '90000'}]}
推荐阅读
- r - 使用 exists() 函数检查 R 中是否存在列表元素
- r - 用左到 y 轴标题的文本注释图
- javascript - 我的 JavaScript 函数不计算小时数
- mysql - 优化 mysql 请求:内部连接很长
- ios - 为 mac 催化剂的 info.plist 文件中的键设置不同的值
- amazon-web-services - 如何配置 Spark / Glue 以避免在 Glue 作业成功执行后创建空的 $_folder_$
- c# - 备份和重新加载控制台命令历史
- c# - 在深色模式下保存并在浅色模式下打开时 UWP RichEditBox 文本颜色问题
- forms - 微软表单识别器 2.1
- javascript - 使用useState挂钩时,在React中提交表单时禁用提交按钮无法按预期工作