我有一个从Firebase导出的json
文件,如下所示
{
"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")
多谢各位
我认为你需要自己把它弄平,幸好它并不复杂:
试试这个(见我上面的评论)
其中
test
是您的数据,因此test['reports']
访问要解析的嵌套信息根据
pd.json_normalize()
的official docs,它假定一个数组(列表)输入。然而,原始的json与dict列表不同,最重要的是,键“id”不存在。因此,我认为绝对需要一个手工制作的解析器代码:
输出
注意:进入像散列一样的
id
所在的层的深度似乎是必要的。这是因为id
最初是keys
,但似乎必须将它们重新格式化为values
,才能被pd.json_normalize
正确地解释为值。我在互联网上的简单调查也没有发现使用简单的内置方法解析这种递归结构的例子相关问题 更多 >
编程相关推荐