python - 将嵌套的 json 读入数据框
问题描述
我有一个json
从 Firebase 导出的文件,如下所示。
{
"reports" : {
"Google-Pixel 2 XL" : {
"-MIoCtD9YUF2G9Esfrfz" : {
"message" : "04 Oct 2020 23:25:17:047 onCreate MainActivity",
"timestamp" : 1601825117067
},
"-MIoCtFVOxu8wdEHtm6q" : {
"message" : "04 Oct 2020 23:25:17:214 onCreate Service",
"timestamp" : 1601825117216
},
"-MIoCyBtKMQqQzUHEXsW" : {
"message" : "04 Oct 2020 23:25:37:682 onStartCommand Service",
"timestamp" : 1601825137685
},
"-MIoFWll9r3qwzWNoGMn" : {
"message" : "04 Oct 2020 23:36:47:687: (1.3212517, 103.860314)",
"timestamp" : 1601825807693
}
},
"Vivo 1820" : {
"-MIoF14JUm6JMZrOzDlL" : {
"message" : "04 Oct 2020 23:34:37:623 onCreate MainActivity",
"timestamp" : 1601825677653
},
"-MIoF1A9ZZNqTu5W-rQD" : {
"message" : "04 Oct 2020 23:34:38:016 onCreate Service",
"timestamp" : 1601825678026
},
"-MIoF2gNDua9FfLBTg6q" : {
"message" : "04 Oct 2020 23:34:44:235 onCreate MainActivity",
"timestamp" : 1601825684248
}
}
}
}
我正在尝试将其转换为如下所示的 4 列数据框
model | id | message | timestamp
Google-Pixel 2 XL | -MIoCtD9YUF2G9Esfrfz | 04 Oct 2020 23:25:17:047 onCreate... | 1601825117067
Vivo 1820 | -MIoF14JUm6JMZrOzDlL | 04 Oct 2020 23:34:37:623 onCreate... | 1601825677653
我怎么做?我尝试了各种方法并进行了规范化,但似乎无法得到它。
data = pd.read_json("firebase-file.json")
df = pd.json_normalize(data, record_path="reports")
谢谢你。
解决方案
我认为您需要自己将其展平,好在它并不复杂:
s = [[k, i, *j.values()] for k,v in data["reports"].items() for i, j in v.items()]
print (pd.DataFrame(s))
0 1 2 3
0 Google-Pixel 2 XL -MIoCtD9YUF2G9Esfrfz 04 Oct 2020 23:25:17:047 onCreate MainActivity 1601825117067
1 Google-Pixel 2 XL -MIoCtFVOxu8wdEHtm6q 04 Oct 2020 23:25:17:214 onCreate Service 1601825117216
2 Google-Pixel 2 XL -MIoCyBtKMQqQzUHEXsW 04 Oct 2020 23:25:37:682 onStartCommand Service 1601825137685
3 Google-Pixel 2 XL -MIoFWll9r3qwzWNoGMn 04 Oct 2020 23:36:47:687: (1.3212517, 103.860314) 1601825807693
4 Vivo 1820 -MIoF14JUm6JMZrOzDlL 04 Oct 2020 23:34:37:623 onCreate MainActivity 1601825677653
5 Vivo 1820 -MIoF1A9ZZNqTu5W-rQD 04 Oct 2020 23:34:38:016 onCreate Service 1601825678026
6 Vivo 1820 -MIoF2gNDua9FfLBTg6q 04 Oct 2020 23:34:44:235 onCreate MainActivity 1601825684248
推荐阅读
- javascript - 使用 Javascript 标记的模板文字生成 SQL 准备语句
- c# - 如何在 MVC 中仅发布列表中的选定项目
- java - 错误:缺少 JavaFX 运行时组件,需要运行此应用程序 - 分析
- string - MongoDB:查找每个类别的最大值和最小值
- node.js - 找不到模块“firebase-tools”的声明文件
- javascript - 在 node.js/socket.io 中制作甲板“服务器端”
- javascript - 不能在 react-native 中使用 uuid4
- c - 如何从 Mega2560 上的 UDRN 获取数据?
- swift - 尝试 pushViewController 时“无法转换类型的值”
- postgresql - 带有“带时区的时间戳”的 Postgresql COPY FROM 文件 - 获取“格式错误的数组文字”