Нужна помощь, Панды читают вложенный файл json

#json #pandas #dataframe #nested

Вопрос:

Мне было интересно, может ли кто-нибудь помочь мне прочитать вложенный файл json, как показано ниже, во фрейм данных. Мы будем очень признательны за любую помощь.

 [
      {
        "cust_batch_id": "1",
        "warning_count": 0,
        "used_vehicles": {
          "used_vehicle_list": [
            {
              "publish_date": "7/30/2021",
              "road_assist_warranty": "5-year/60,000-mile",
              "model_number_list": [
                "K8H"
              ]
            }
          ],
          "template": 4,
         "data_available": true
        }
      },
      {
        "cust_batch_id": "1",
        "warning_count": 0,
        "used_vehicles": {
          "used_vehicle_list": [
            {
              "publish_date": "7/30/2021",
              "road_assist_warranty": "3-year/36,000-mile, ",
              "model_number_list": [
                "FC2F5JEW"
              ]
            }
          ],
          "template": 4,
          "data_available": true
        }
      },
      {
        "cust_batch_id": "1",
        "warning_count": 0,
        "used_vehicles": {
          "used_vehicle_list": [
            {
              "publish_date": "7/30/2021",
              "road_assist_warranty": "5-year/60,000-mile",
              "model_number_list": [
                "P0L"
              ]
            }
          ],
          "template": 4,
          "data_available": true
        }
      }
    ]
 

Ответ №1:

  • js это образец JSON, который вы предоставили
  • простой случай нормализации JSON, explode() списка, затем сопоставление встроенного диктанта со столбцами
 df = pd.json_normalize(js)
df.join(df.loc[:,"used_vehicles.used_vehicle_list"].explode().apply(pd.Series))
 
cust_batch_id warning_count used_vehicles.used_vehicle_list used_vehicles.шаблон used_vehicles.data_available publish_date road_assist_warranty model_number_list
0 1 0 [{‘дата публикации’: ‘7/30/2021’, ‘гарантия безопасности дорожного движения’: ‘5 лет/60 000 миль’, ‘список моделей»: [‘K8H’]}] 4 Правда 7/30/2021 5-year/60,000-mile [‘K8H’]
1 1 0 [{‘дата публикации’: ‘7/30/2021’, ‘гарантия безопасности дорожного движения’: ‘3 года/36 000 миль ‘, ‘список моделей’: [‘FC2F5JEW’]}] 4 Правда 7/30/2021 3-year/36,000-mile, [‘FC2F5JEW’]
2 1 0 [{‘дата публикации’: ‘7/30/2021’, ‘гарантия безопасности дорожного движения’: ‘5 лет/60 000 миль’, ‘список моделей’: [‘P0L’]}] 4 Правда 7/30/2021 5-year/60,000-mile [‘P0L’]

предпосылки

  • как сохранить JSON в файл и как загрузить JSON из файла
  • это ваш образец JSON
  • вы также можете декодировать JSON, закодированный в строке с json.loads(str)
 import json
from pathlib import Path

js = [{'cust_batch_id': '1',
  'warning_count': 0,
  'used_vehicles': {'used_vehicle_list': [{'publish_date': '7/30/2021',
     'road_assist_warranty': '5-year/60,000-mile',
     'model_number_list': ['K8H']}],
   'template': 4,
   'data_available': True}},
 {'cust_batch_id': '1',
  'warning_count': 0,
  'used_vehicles': {'used_vehicle_list': [{'publish_date': '7/30/2021',
     'road_assist_warranty': '3-year/36,000-mile, ',
     'model_number_list': ['FC2F5JEW']}],
   'template': 4,
   'data_available': True}},
 {'cust_batch_id': '1',
  'warning_count': 0,
  'used_vehicles': {'used_vehicle_list': [{'publish_date': '7/30/2021',
     'road_assist_warranty': '5-year/60,000-mile',
     'model_number_list': ['P0L']}],
   'template': 4,
   'data_available': True}}]

fn = Path.cwd().joinpath("SO_js.json")
# save to a file
with open(fn, "w") as f: json.dump(js, f)
# load from a file
with open(fn) as f: js = json.load(f)

 

Комментарии:

1. Спасибо, Роб, за твою помощь. Я не знаком с JSON. Я попытался прочитать входные данные в объект JSON несколькими способами. Ничего не сработало. Не могли бы вы, пожалуйста, показать свой шаг, на котором вы помещаете образцы в js? Спасибо!

2. Я вставил в ответ больше. Я не знаю, откуда вы взяли JSON, довольно часто это API, использующий пакет запросов . Это имеет встроенный метод json()

3. Роб, спасибо тебе!

4. Просто добавлю, что чтение такого рода данных-не моя работа. Поэтому я почти уверен, что делаю это не так, как задумано.