我是Python新手,想使用Padas从json提取数据。
Json的嵌套结构如下:
deviceIds
作为输出,我需要一行:级别0的'idDriver',然后一行中的标识/车辆节点的'licensePlate':
我尝试申请的是:
(从API加载数据后效果很好)
{
"idDriver": "100001",
"defaultTripType": "private",
"fleetManagerRole": null,
"identifications": [
{
"code": "90-00-00-77-20",
"from": "2019-08-08T10:38:15Z",
"rawId": "",
"vehicle": {
"isBusinessCar": "0",
"id": "10000",
"licensePlate": "ABCD",
"class": "Suziki 1.6 CDTI",
}
}
}
]
}
对此我将不胜感激。
亲切的问候, 槟榔
答案 0 :(得分:0)
我会像这样重建您的字典:
New_Data = {
"id" : [],
"licensePlate" : []
}
New_Data["id"].append(data["idDriver"])
New_Data["licensePlate"].append(data["identifications"][0]["vehicle"]["licensePlate"])
如果您有很多数据[“标识”],则可以轻松查看它们,如果有很多驱动程序,您也可以这样做。
答案 1 :(得分:0)
对我来说,您的第一个代码很好用,只有在必要时才从列名称中删除vehicle.
文本:
json_data = {
"idDriver": "100001",
"defaultTripType": "private",
"fleetManagerRole": 'null',
"identifications": [
{
"code": "90-00-00-77-20",
"from": "2019-08-08T10:38:15Z",
"rawId": "",
"vehicle": {
"isBusinessCar": "0",
"id": "10000",
"licensePlate": "ABCD",
"class": "Suziki 1.6 CDTI",
}
}
]
}
workdata = json_normalize(json_data, record_path= ['identifications'], meta=['idDriver'])
print (workdata)
code from rawId vehicle.isBusinessCar \
0 90-00-00-77-20 2019-08-08T10:38:15Z 0
vehicle.id vehicle.licensePlate vehicle.class idDriver
0 10000 ABCD Suziki 1.6 CDTI 100001
workdata.columns = workdata.columns.str.replace('vehicle\.','')
print (workdata)
code from rawId isBusinessCar id \
0 90-00-00-77-20 2019-08-08T10:38:15Z 0 10000
licensePlate class idDriver
0 ABCD Suziki 1.6 CDTI 100001
答案 2 :(得分:0)
我最近编写了一个程序包来轻松处理此类任务,称为cherrypicker。我认为以下代码片段将通过CherryPicker实现您的任务:
type
from cherrypicker import CherryPicker
json_data = json.loads(myResponse.text)
picker = CherryPicker(json_data)
flat_data = picker.flatten['idDriver', 'identifications_0_vehicle_licensePlate'].get()
会看起来像这样(我假设您的数据实际上是对象列表,就像您上面描述的那样):
flat_data
然后可以将其加载到数据框中,如下所示:
[['100001', 'ABCD'], ...]
如果您想以稍微不同的方式来整理数据(例如,您想要每个车牌/驾驶员ID组合,而不仅仅是每个驾驶员的第一个车牌),那么尽管可能需要,您也应该能够这样做两三行,而不只是一行。查看我们的文档,以获取其他使用方式的示例:https://cherrypicker.readthedocs.io。
要安装cherrypicker,只需import pandas as pd
df = pd.DataFrame(flat_data, columns=["idDriver", "licensePlate"])
。