Как добавить сложный словарь в таблицу Excel? - PullRequest
2 голосов
/ 25 апреля 2020

Я хотел бы добавить данные в электронную таблицу для последующего анализа. Я пробовал несколько разных подходов, использующих циклы for, но они всегда заканчиваются ошибками. Я новичок в python, но я пытаюсь учиться, как я строю. Что мне нужно сделать, это взять словарь dict_items и с помощью ключей вставить данные в существующую таблицу Excel. Однако, если я go элемент за элементом, я получаю только один элемент в строке для некоторых столбцов и больше элементов для других столбцов. Это потому, что в одних ключах больше данных, чем в других. Мне нужно, чтобы набор данных для ключей, имеющих только один элемент, копировал этот один элемент для всех остальных строк до тех пор, пока не будет скопирован последний элемент для ключа с наибольшим количеством элементов. Ниже приведен пример выходных данных, если это поможет понять, что я пытаюсь сделать.

Например, это словарь и один из циклов for, которые я пробовал:

dict_items = {'most items':['1','2','3','4','5'], 'some items':['item1','item2','item3','item4','item5'], 'one item': 'banana'}

import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet()


row = 0
col = 0

dict_items = {'most items':['1','2','3','4','5'], 'some items':['item','item','item','item','item'], 'one item': 'banana'}

for key in d.keys():
    row += 1
    worksheet.write(row, col, key)
    for item in d[key]:
        worksheet.write(row, col + 1, item)
        row += 1

Это работает для добавления данных в электронную таблицу, но не для обеспечения того, чтобы данные были равномерными по каждой строке.

Электронная таблица должна выглядеть примерно так, если данные введены правильно:

| most items | some items | one item |
|     1      |     item1  |  banana  |
|     2      |     item2  |  banana  |
|     3      |     item3  |  banana  |
|     4      |     item4  |  banana  |
|     5      |     item5  |  banana  |

Надеюсь, выходной пример даст вам лучшее представление о том, что я пытаюсь сделать.

1 Ответ

2 голосов
/ 25 апреля 2020

Лучшее решение - преобразовать ваш словарь в pandas .DataFrame, установив pandas (pip install pandas)

import pandas as pd

dict_items = {'most items':['1','2','3','4','5'], 'some items':['item','item','item','item','item'], 'one item': 'banana'}

#create a DataFrame
df = pd.DataFrame(dict_items)
#contatenate a column with the index
df['some items']  = df['some items'] + df['most items']

#create the excel file
df.to_excel("example.xlsx", index=False)

output

enter image description here

В противном случае

import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet()
row = 0
col = 0


dict_items = {'most items':['1','2','3','4','5'], 'some items':['item','item','item','item','item'], 'one item': 'banana'}

for key in list(dict_items.keys())[0:3]:
    worksheet.write(row, col, key)
    #print(str(row) + " " + str(col) + " "+ str(key))
    for item in dict_items[key]:
        row += 1
        if key == 'most items':
            #print(str(row) + " " + str(col) + " "+ str(key))
            worksheet.write(row, col, item)
            #print(item)
        if key == "some items":
            worksheet.write(row, col, item+str(row))
        if key == "one item":        
            if row <= len(dict_items.get("most items")):
                worksheet.write(row, col, dict_items[key])
                #print(dict_items[key])
    col +=1
    row = 0

workbook.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...