Преобразование списка JSON в Dataframe в несколько листов Excel

У меня есть список нескольких объектов, которые я хочу преобразовать в Excel, и мне нужно, чтобы отдельные объекты находились на разных листах. Затем я зациклил список, чтобы преобразовать его в Dataframe, см. ниже список json, который я хотел преобразовать.

[
  [],
  [
    {
      "Tax": "69.767442",
      "Details": {
        "Attributes": "dejje",
        "Name": "Plate",
        "additionalAttributes6": "",
        "Nuber": "",
        "additionalAttributes8": "",
        "summaryDescription": "",
        "Discount": "",
        "Groups": "",
        "taxInclusive": "",
        "additionalAttributes7": ""
      }
    }
  ],
  [
    {
      "Tax": "69.767442",
      "Details": {
        "Attributes": "",
        "Name": "",
        "additionalAttributes6": "",
        "Nuber": "",
        "additionalAttributes8": "",
        "summaryDescription": "",
        "Discount": "",
        "Groups": "",
        "taxInclusive": "10.19",
        "additionalAttributes7": ""
      }
    }
  ]
]  

См. код ниже, который я пытаюсь зациклить, чтобы добавить и разместить отдельные листы на основе каждой строки вышеуказанного json.

with open('data.json') as file:

    data = json.load(file)
    arg_mode = 'a' if 'out.xlsx' in os.getcwd() else 'w' # line added
    df = []
    index = 0
    for value in data:
        df[index] = pd.DataFrame(json_normalize(value, max_level=1))
        with pd.ExcelWriter('out.xlsx') as writer:
          df[index].to_excel(writer,mode=arg_mode,index=False,sheet_name=df[index],engine = "openpyxl")
        index = index + 1

Кто-нибудь, пожалуйста, помогите, что я делаю неправильно

Этот вопрос похож на: Создание нескольких листов Excel с использованием данных из DataFrame pandas. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

import random 10.07.2024 07:53

Спасибо, да, они похожи, но я хочу зациклить данные в списке, и поэтому у меня возникла проблема.

Codephree Coding 10.07.2024 09:22

Я думаю, вам просто нужно создать писатель вне цикла for.

Matthew Strawbridge 10.07.2024 16:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать что-то подобное, немного переименовав столбец и используя перечисление:

from pathlib import Path
import json

import pandas as pd


with open(file = "data.json") as file:
    data = json.load(fp=file)

for idx, value in enumerate(iterable=data):
    arg_mode = "a" if [x for x in Path.cwd().glob(pattern = "out.xlsx")] else "w"

    if value:
        with pd.ExcelWriter(path = "out.xlsx", mode=arg_mode, engine = "openpyxl") as writer:
            (pd
             .json_normalize(data=value, max_level=1)
             .rename(columns=lambda x: x.split(".")[-1])
             .to_excel(excel_writer=writer, index=False, sheet_name=str(idx))
             )

Спасибо, именно то, что мне было нужно. Мне нужно улучшить свой список и лямбда-функцию. Отлично работает @jason-baker

Codephree Coding 13.07.2024 17:05

Другие вопросы по теме