Разделить фрейм данных на несколько наборов данных на основе условий и каждого поднабора в Excel - PullRequest
0 голосов
/ 02 мая 2020

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

Master_data (df) Выход A Выход B

import pandas as pd
import os
## Belgium\2020\GMC Prep Automation")
from openpyxl import load_workbook
import xlsxwriter
from shutil import copyfile

file = input("please enter excelfile: ")
extension = os.path.splitext(file)[1]
filename = os.path.splitext(file)[0]
pth = "\\we.interbrew.net\\DFSEurope\\Crown Jewels\\Revenue Management\\WEST\\2. BE\\4. MPM Belgium\\2020\\GMC Prep Automation"
newfile = os.path.join(pth, filename+"_2"+extension)
#myfile = os.path.join(pth, Split_Test.xlsx)

df = pd.read_excel(file)
colpick = input("enter column to be splitted: ")        
col = list(set(df[colpick].values))

def sendtoexcel(col):
    copyfile(file, newfile)

    for j in col:
        writer = pd.ExcelWriter(newfile,engine='openpyxl')

        for myname in col:
            mydf=df.loc[df[colpick] == myname]
            mydf.to_excel(writer,sheet_name=myname,index=False)               

        writer.save()

    print("\nCompleted")
    return

1 Ответ

0 голосов
/ 02 мая 2020

При условии, что пользователь вводит правильные имена файлов и существующий столбец, рассмотрим groupby run, а не двойное for l oop в том же столбце. Код обернут в try/except на случай, если пользователь введет неправильное имя столбца или возникнет проблема с экспортом данных в Excel.

from openpyxl import load_workbook

...

colpick = input("enter column to be splitted: ")        
colpick = colpick.title().strip()

def sendtoexcel():
    try:
        with pd.ExcelWriter(file, engine='openpyxl') as writer:
            writer.book = load_workbook(file)

            for i, sub in df.groupby([colpick]):             
                sub.to_excel(writer, sheet_name=i, index=False)

            writer.save()

    except Exception as e:
        print(e)

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