从python pandas中的嵌套json中读取特定信息

时间:2019-05-14 15:17:27

标签: python json pandas nested

我有一个用python读取的嵌套json文件。我只对特定信息感兴趣。假设我有以下json文件

  {
    "metadata_id": "3596fe93-5e4d-4ba9-8b10-c7ce28b18475",
    "kistler": {
      "metadata_id": "c2faa0df-e07a-40bb-91db-ac95281e0bfb",
      "actualValues": {
        "Zykluszaehler": {
          "name": "Zykluszaehler",
          "unit": "-",
          "value": 196.0,
          "type": 2
        },
        "Zykluszeit": {
          "name": "Zykluszeit",
          "unit": "s",
          "value": 5082.0,
          "type": 2
        },
        "Parameter 1": {
          "name": "Parameter 1",
          "unit": "s",
          "value": 0.0,
          "type": 1
        },
        "Parameter 2": {
          "name": "Parameter 2",
          "unit": "Schalter",
          "value": 0.0,
          "type": 1
        }
      },
      "mdeValues": {
        "Status": "0",
        "Vollautomatik": "1",
        "Manuell": "0",
        "Maschinenstatus": "4",
        "Maschinenstillstand": "0",
        "ManuelleBuchung": "",
        "ManuellerStatus": "0GM",
        "Alarme": "",
        "Auftrag": "NONE",
        "Artikel": "NONE",
        "Werkzeug": "NONE",
        "Charge": "NONE",
        "Zykluszaehler": "196",
        "Anfahrausschuss": "",
        "Aussschusszaehler": "-1",
        "GutteileZaehler": "-1",
        "Kavitaeten": "1",
        "Sollstueck": "0",
        "GutZaehler": "10325",
        "BruttoZaehler": "10325",
        "SchlechtZaehler": "0",
        "AusschussGrund": "",
        "AusschussAnzahl": "",
        "Bemerkung": "",
        "Message": "",
        "SollZykluszeit": "180",
        "SollStkProStd": "",
        "QS_TPP_ID": "200",
        "Folgeauftrag": "",
        "SollAusschuss": "0",
        "SchusszahlProduktion": "3",
        "PdeCommand": "",
        "ExternalStrValues": "",
        "ExternalValues": "",
        "ULDL": "00",
        "Personal": "NONE",
        "SummeIstLaufzeitAuftrag": "644713",
        "SummeSollLaufzeitAuftrag": "26029726",
        "SummeIstLaufzeit": "644713",
        "SummeSollLaufzeit": "22286461",
        "Freizeit": "0",
        "SummeAusschuss": "0",
        "StartIstMenge": "0",
        "StartSchlechtMenge": "0",
        "StartSummeAusschuss": "0",
        "OrderId": "",
        "Option1": "",
        "Option2": "",
        "Rohstoff": "",
        "SchichtID": "Spätschicht",
        "Startzeit": "2019-05-08 14:00:00",
        "Endzeit": "2019-05-08 22:00:00",
        "SollLaufzeit": "28800",
        "Barcode": "NONE",
        "ProgStillstand": "0",
        "SummeLaufzeit": "26029726",
        "ExternalCommand": "zyklusoutofrange=1"
      },
      "processDataCreatedUtc": "2019-05-08T14:54:07.4391900Z",
      "processDataCreatedLocal": "2019-05-08T16:54:07.4391900+02:00",
      "cycle": 196,
      "machineId": "T_68539",
      "pdeMachineId": 102,
      "dmc": "0020000000NONE20190508145407000000242T_68539000NONE"
    },
    "id": { "dmc": "0020000000NONE20190508145407000000242T_68539000NONE" },
    "MAi": {
      "metadata_id": "2c8b4fd6-7142-4e1d-83af-199ba6967cde",
      "samples": [
        {
          "metadata_id": "ad123bdd-1d1d-49b8-84d6-6308eab38744",
          "sampleID": 74517,
          "parameterID": 9,
          "equipmentID": 1,
          "SampleDateTimestamp": 1557327571,
          "parameterName": "Produktcode",
          "Unit": "Status1",
          "UTCBias": -120,
          "dataKeys": [
            {
              "metadata_id": "120c99f7-c768-4605-9874-75be45d0a0fc",
              "name": "Bauteil",
              "description": "",
              "ID": 2,
              "LDDID": 1,
              "value": "1",
              "groupID": 1,
              "dkType": 0
            },
            {
              "metadata_id": "9a5a52a5-1e1e-4d99-a9f9-728e33cad934",
              "name": "Produktcode",
              "description": "",
              "ID": 1,
              "LDDID": 1,
              "value": "0020000000NONE20190508145407000000242T_68539000NONE",
              "groupID": 2,
              "dkType": 0
            }
          ],
          "rawValues": [
            {
              "metadata_id": "ac178e72-86a0-4dc6-8b5f-10129cce4156",
              "value": 1.0,
              "dataKeys": []
            }
          ],
          "SMAX": 0.0,
          "SMEAN": 0.0,
          "SMEDIAN": 0.0,
          "SMIN": 0.0,
          "SN": 0,
          "SSD": 0.0
        }
      ]
    },
    "processDataCreatedUtc": "2019-05-08T14:54:07.4400000",
    "processDataCreatedLocal": "2019-05-08T16:54:07.4400000"
  }

我想要一个具有以下结构的熊猫框架:

Zykluszahler|Zykluszeit|Parameter 1| Parameter 2
   196.0        5082.0     0.0        0.0

到目前为止,我一直做到到这里

import pandas as pd
import json
from flatten_json import flatten
from pandas.io.json import json_normalize

with open(r"filepath") as data_file:
data=json.load(data_file)
df=json_normalize(data["kistler"])

如果我使用此行,我将获得所有信息,即

'actualValues.Prozessueberwachung_Schalter_SW.name',
   'actualValues.Prozessueberwachung_Schalter_SW.type',
   'actualValues.Prozessueberwachung_Schalter_SW.unit',
   'actualValues.Prozessueberwachung_Schalter_SW.value',
   'actualValues.S11013_Hub_A_Auswerfer_zurueck_verzoegert.name',
   'actualValues.S11013_Hub_A_Auswerfer_zurueck_verzoegert.type',
   'actualValues.S11013_Hub_A_Auswerfer_zurueck_verzoegert.unit',
   'actualValues.S11013_Hub_A_Auswerfer_zurueck_verzoegert.value',
   'actualValues.Zykluszaehler.name', 'actualValues.Zykluszaehler.type',
   'actualValues.Zykluszaehler.unit', 'actualValues.Zykluszaehler.value',
   'actualValues.Zykluszeit.name', 'actualValues.Zykluszeit.type',
   'actualValues.Zykluszeit.unit', 'actualValues.Zykluszeit.value',
   'cycle', 'dmc', 'machineId', 'mdeValues.Alarme',
   'mdeValues.Anfahrausschuss', 'mdeValues.Artikel', 'mdeValues.Auftrag',
   'mdeValues.AusschussAnzahl', 'mdeValues.AusschussGrund',
   'mdeValues.Aussschusszaehler', 'mdeValues.Barcode',
   'mdeValues.Bemerkung', 'mdeValues.BruttoZaehler', 'mdeValues.Charge',
   'mdeValues.Endzeit', 'mdeValues.ExternalCommand',
   'mdeValues.ExternalStrValues', 'mdeValues.ExternalValues',
   'mdeValues.Folgeauftrag', 'mdeValues.Freizeit', 'mdeValues.GutZaehler',
   'mdeValues.GutteileZaehler', 'mdeValues.Kavitaeten',
   'mdeValues.Manuell', 'mdeValues.ManuelleBuchung',
   'mdeValues.ManuellerStatus', 'mdeValues.Maschinenstatus',
   'mdeValues.Maschinenstillstand', 'mdeValues.Message',
   'mdeValues.Option1', 'mdeValues.Option2', 'mdeValues.OrderId',
   'mdeValues.PdeCommand', 'mdeValues.Personal',
   'mdeValues.ProgStillstand', 'mdeValues.QS_TPP_ID', 'mdeValues.Rohstoff',
   'mdeValues.SchichtID', 'mdeValues.SchlechtZaehler',
   'mdeValues.SchusszahlProduktion', 'mdeValues.SollAusschuss',
   'mdeValues.SollLaufzeit', 'mdeValues.SollStkProStd',
   'mdeValues.SollZykluszeit', 'mdeValues.Sollstueck',
   'mdeValues.StartIstMenge', 'mdeValues.StartSchlechtMenge',
   'mdeValues.StartSummeAusschuss', 'mdeValues.Startzeit',
   'mdeValues.Status', 'mdeValues.SummeAusschuss',
   'mdeValues.SummeIstLaufzeit', 'mdeValues.SummeIstLaufzeitAuftrag',
   'mdeValues.SummeLaufzeit', 'mdeValues.SummeSollLaufzeit',
   'mdeValues.SummeSollLaufzeitAuftrag', 'mdeValues.ULDL',
   'mdeValues.Vollautomatik', 'mdeValues.Werkzeug',
   'mdeValues.Zykluszaehler', 'metadata_id', 'pdeMachineId',
   'processDataCreatedLocal', 'processDataCreatedUtc'

如果我在代码中添加以下内容

df=json_normalize(data["kistler"],"actualValues")

我得到名称,但没有值和列。我觉得我离那儿不远。对于任何帮助,我都会非常感激

欢呼

1 个答案:

答案 0 :(得分:2)

我只需要手工构建数据

with open(r"filepath") as data_file:
    data=json.load(data_file)["kistler"]["actualValues"]

df = pd.DataFrame({k: [v["value"]] for k,v in data.items()})

它应该给出:

   Zykluszaehler  Zykluszeit  Parameter 1  Parameter 2
0          196.0      5082.0          0.0          0.0