Мульти вкладка Excel листы, уникальные записи в 1 столбце, создание нового файла с данными из другого столбца в качестве имени, все с заголовками - PullRequest
0 голосов
/ 03 апреля 2020

Как обычно, я откусила больше, чем могу прожевать. У меня есть файл "list.xlsx". Файл имеет 3 листа: «текущие студенты», «закончен» и «отменен». Все листы содержат данные под следующими заголовками [StudentId, FirstName, Lastname, DoB, Национальность, CourseID, CourseName, Startdate, Finishdate, UnitID, UnitName, UnitCompetency]

Я создал нижеуказанную мерзость, которая начинается с что мне нужно.

Что я хочу сделать, это:

1) Создайте файл с FirstName + Lastname.xlsx на основе StudentId (уникального) в папке, названной в честь их листа

2) В этом файле возьмите всю информацию из остальных столбцов и добавьте ее в свой файл

    #python 3.8
import pandas as pd
import os
import shutil

file = "list.xlsx"
CS = "current student"
Fin = "finished"
Can = "cancelled"
TheList = {CS, Fin, Can}
CanXlsx = pd.read_excel(file, sheet_name = Can)
FinXlsx = pd.read_excel(file, sheet_name = Fin)
CSXlsx = pd.read_excel(file, sheet_name = CS)

if os.path.exists(CS):
    shutil.rmtree(CS)
os.mkdir(CS)
CSDir = '//current student//'
if os.path.exists(Fin):
    shutil.rmtree(Fin)
os.mkdir(Fin)
FinDir = '//finished//'
if os.path.exists(Can):
    shutil.rmtree(Can)
os.mkdir(Can)
CanDir = '//cancelled//'

CancelID = CanXlsx.StudentId.unique()
FinID = FinXlsx.StudentId.unique()
CSID = CSXlsx.StudentId.unique()

Я думал, что мне стало лучше с циклами и т.п., но Кажется, я не могу понять их. Я могу думать о логике c, но с кодом она не доходит.

https://drive.google.com/file/d/134fqWx6veF7zp_12GqFYlbmPZnK8ihaV/view?usp=sharing

1 Ответ

1 голос
/ 03 апреля 2020

Я думаю, что для этого необходим подход - создать 3 фрейма данных (возможно, это возможно сделать с одним, но я не помню). 1) Затем в каждом фрейме данных вам нужно будет извлечь список «Имя + Фамилия», а затем 2) вам нужно будет создать маски для фреймов данных, чтобы извлечь информацию и сохранить ее.

import os
import shutil

file = "list.xlsx"
CS = "current student"
Fin = "finished"
Can = "cancelled"
TheList = {CS, Fin, Can}
CanXlsx = pd.read_excel(file, sheet_name = Can)
FinXlsx = pd.read_excel(file, sheet_name = Fin)
CSXlsx = pd.read_excel(file, sheet_name = CS)

## File Creation
if os.path.exists(CS):
    shutil.rmtree(CS)
os.mkdir(CS)
CSDir = '//current student//'
if os.path.exists(Fin):
    shutil.rmtree(Fin)
os.mkdir(Fin)
FinDir = '//finished//'
if os.path.exists(Can):
    shutil.rmtree(Can)
os.mkdir(Can)
CanDir = '//cancelled//'

# Create full names
CanXlsx["Fullname"] = CanXlsx["StudentId"] + "_" + CanXlsx["First Name"] + "_" + CanXlsx["Last Name"]
## Same for the other dfs

# Get a list of ids
# canFullNames = list(CanXlsx["Fullname"]) Edit: Preferred approach through student Ids
canIds = list(CanXlsx["StudentId"])
## Same for the other dfs

# Loop over the list of full names to create your df
for id in canIds:
    df1 = CanXlsx[CanXlsx["StudenId"] == id] # This will filter the rows by the id you want
    # Retrieve the full name
    name = df1.iloc[0]["Fullname"]

    # Create the filename
    filename = os.path.join(CanDir,name + ".xlsx")

    df1.drop(columns = ["First Name", "Last Name"] # I understand that these columns are not required on each file
    df1.to_excel(filename,header=True,index=False)

## Same for the other dfs

Дайте мне знать, если это поможет, по крайней мере, я понял, что вы хотите достичь с помощью своего кода. : D

...