python - DataFrame 的字典列表
问题描述
我有这样的数据,我希望将数据写入数据框中,以便可以直接将其转换为 csv 文件。
Data =
[ {'event': 'User Clicked', 'properties': {'user_id': '123', 'page_visited': 'contact_us', etc},
{'event': 'User Clicked', 'properties': {'user_id': '456', 'page_visited': 'homepage', etc} , ......
{'event': 'User Clicked', 'properties': {'user_id': '789', 'page_visited': 'restaurant', etc}} ]
这就是我能够访问其值的方式:
for item in list_of_dict_responses:
print item['event']
for key, value in item.items():
if type(value) is dict:
for k, v in value.items():
print k,v
我希望它在一个数据框中,其中 event 是一个值为 User Clicked 的列,properties 是另一个具有子列的列,user_id, page_visited, contact_us
然后是子列的相应值。
解决方案
展平嵌套字典,然后只需使用数据框构造函数来创建数据框。
data = [
{'event': 'User Clicked', 'properties': {'user_id': '123', 'page_visited': 'contact_us'}},
{'event': 'User Clicked', 'properties': {'user_id': '456', 'page_visited': 'homepage'}},
{'event': 'User Clicked', 'properties': {'user_id': '789', 'page_visited': 'restaurant'}}
]
可以以多种方式构造扁平化字典。这是使用通用生成器的 1 种方法,可用于任意深度的嵌套字典(或至少在达到最大递归深度之前)
def flatten(kv, prefix=[]):
for k, v in kv.items():
if isinstance(v, dict):
yield from flatten(v, prefix+[str(k)])
else:
if prefix:
yield '_'.join(prefix+[str(k)]), v
else:
yield str(k), v
然后使用列表推导将 中的所有记录展平data
,构造数据框
pd.DataFrame({k:v for k, v in flatten(kv)} for kv in data)
#Out
event properties_page_visited properties_user_id
0 User Clicked contact_us 123
1 User Clicked homepage 456
2 User Clicked restaurant 789
推荐阅读
- reactjs - 我的 useEffect() 有什么问题?它返回空对象
- amazon-web-services - AWS Step Functions 图形导出 API
- javascript - 加载 gif 然后过渡到 reactjs 上的网页
- reactjs - 为什么在部署 React 项目时终端命令 'git add .'、git commit...' 和 'git push...' 列为可选?
- c# - 学习 C#,我有一个选角问题
- python - 如何在 for 循环中制作视频捕获流以传输多个摄像机
- apache - Apache 2.4:是否可以独立于父目录身份验证对子目录进行身份验证?
- c# - AddSigningCredentials 错误指示未定义对象但堆栈跟踪中没有项目代码
- flutter - TextField 键盘上的颤振手柄返回(关闭)按钮
- pic18 - 在 Linux 上使用 pickit4 编程和运行 PIC18