Python: вывод данных в электронную таблицу Excel - PullRequest
0 голосов
/ 15 октября 2018

Мне нужно сделать то, что, вероятно, очень просто для опытного программиста.Моя программа на Python успешно выполняет следующие действия:

  1. Импорт электронной таблицы Excel
  2. Итерация по строкам и подсчет повторяющихся вхождений "Model", независимо от того, используется модель (Location) илинет, и кто "потреблял" модель (и сколько они потребляли).Все, что не «потреблено», будет считаться «доступным».
  3. Распечатайте «Модель», «Потреблено», «Доступно» и «Запрашивающий» (кто-то, кто потреблял модель).

Вместо того, чтобы просто печатать значения, мне нужно добавить их в лист в книге Excel с заголовками столбцов Model, Consumed, Avaible и Requestors.

Вот как я печатаю значения:

if not REQUESTORLIST:
    print(CURRENTMODEL, "Consumed:", CONSUMEDCOUNTER, "Available:", AVAILABLECOUNTER)
else:
    print(CURRENTMODEL,"Consumed:",CONSUMEDCOUNTER, "Available:",AVAILABLECOUNTER,REQUESTORS)

Вот типы данных:

print(type(CURRENTMODEL))
print(type(CONSUMEDCOUNTER))
print(type(AVAILABLECOUNTER))
print(type(REQUESTORS))

Выходы:

<class 'str'>
<class 'int'>
<class 'int'>
<class 'collections.Counter'>

Наконец, результаты программы урезаны:

Model    WS-SFP Consumed: 1 Available: 2 Counter({'Requester    Anthony House': 1})

Я новичок в программировании (это первая программа, которую я написал), и мне не удается найти способ получить эти значения для записи в таблицу Excelс четырьмя заголовками столбцов, которые мне нужны.Я пытался преобразовать их в строки и использовать .write, но пока безуспешно.У вас есть какие-нибудь предложения?

РЕДАКТИРОВАТЬ: Спасибо за быстрый ответ.Я думаю, что для меня может быть полезным просто опубликовать свой код.Я открыт для обратной связи о том, как оптимизировать эту вещь, поскольку она, вероятно, не на должном уровне.Я экспериментировал с .write, который пропускает строки в выводе таблицы Excel, не заполняет заголовки столбцов и т. Д. Вероятно, не лучший вариант.

import os
import openpyxl
import matplotlib
import numpy
import pandas as pd
import xlrd
import xlwt
from xlwt import Workbook
import xlsxwriter
from collections import Counter

#file to pull data from
excel_file = 'Customer_Inventory_Test.xlsx'
models = pd.read_excel(excel_file)
#file to export results
workbook = xlsxwriter.Workbook('Inventory Report.xlsx')
worksheet = workbook.add_worksheet()

row = 0
col = 0
ROWCOUNT = models.shape[0]

while True:
    CONSUMEDCOUNTER = 0
    AVAILABLECOUNTER = 0
    REQUESTORLIST = []
    #break when no more rows
    if row == ROWCOUNT:
        break
    MODEL = models.iloc[row, [0]]
    #convert to string for comparison
    MODEL = MODEL.to_string()
    CURRENTMODEL = MODEL
    LOCATION = models.iloc[row, [2]]
    LOCATION = LOCATION.to_string()

    while CURRENTMODEL == MODEL:
        if "Consumed" in LOCATION:
            CONSUMEDCOUNTER += 1
            REQUESTOR = models.iloc[row, [17]]
            # convert to string for comparison
            REQUESTOR = REQUESTOR.to_string()
            REQUESTORLIST.append(REQUESTOR)
        else:
            AVAILABLECOUNTER += 1
        row += 1
        if row == ROWCOUNT:
            break
        MODEL = models.iloc[row, [0]]
        MODEL = MODEL.to_string()
        LOCATION = models.iloc[row, [2]]
        LOCATION = LOCATION.to_string()

    REQUESTORS = Counter(REQUESTORLIST)

    if not REQUESTORLIST:
        worksheet.write(row, col, CURRENTMODEL)
        worksheet.write(row, col + 1, CONSUMEDCOUNTER)
        worksheet.write(row, col + 2, AVAILABLECOUNTER)
        print(CURRENTMODEL[9:], "Consumed:", CONSUMEDCOUNTER, "Available:", 
AVAILABLECOUNTER)
    else:
        worksheet.write(row, col, CURRENTMODEL)
        worksheet.write(row, col + 1, CONSUMEDCOUNTER)
        worksheet.write(row, col + 2, AVAILABLECOUNTER)
        #worksheet.write(row, col + 3, REQUESTORS) <- Doesn't like 
#requestors data structure
        print(CURRENTMODEL[9:],"Consumed:",CONSUMEDCOUNTER, 
"Available:",AVAILABLECOUNTER,REQUESTORS)

workbook.close()

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

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

Вот несколько ссылок с примерами.

https://www.datacamp.com/community/tutorials/pandas-tutorial-dataframe-python https://xlsxwriter.readthedocs.io/working_with_pandas.html

PS: Вы даже можете выполнять свои подсчеты, используя структуры панд.

0 голосов
/ 16 октября 2018

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

Вот что у меня есть:

#NEWLIST is the list that changes with each loop iteration.
NEWLIST = [(CURRENTMODEL[9:], CONSUMEDCOUNTER, AVAILABLECOUNTER, REQUESTORS)]
CURRENTLIST.extend(NEWLIST)

df = pd.DataFrame(CURRENTLIST, columns=["Model","Consumed","Available","Requestor(s)"])
writer = pd.ExcelWriter('Inventory Summary Report.xlsx')
df.to_excel(writer,'Sheet1',freeze_panes=(1,1), index=False)
0 голосов
/ 15 октября 2018

Добро пожаловать в переполнение стека.Проверьте этот метод DataFrame: .to_excel () .Вам нужно вызвать этот метод из вашего фрейма данных, указав путь к файлу, в котором будет расположен новый файл Excel.Пример: my_data_frame.to_excel('path/to/my/new_file.xlsx').

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