У меня есть список нескольких объектов, которые я хочу преобразовать в 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
Кто-нибудь, пожалуйста, помогите, что я делаю неправильно
Спасибо, да, они похожи, но я хочу зациклить данные в списке, и поэтому у меня возникла проблема.
Я думаю, вам просто нужно создать писатель вне цикла for.
Вы можете попробовать что-то подобное, немного переименовав столбец и используя перечисление:
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
Этот вопрос похож на: Создание нескольких листов Excel с использованием данных из DataFrame pandas. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.