Объединяйте одинаковые листы из разных экземпляров в один - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь объединить несколько листов с одинаковыми именами в один лист Excel

Пробовал код ниже:

import os
import pandas as pd

files = os.listdir("XXXX")

print("All files in the given directory are :", files)

files_xlsx = [f for f in files if f[-4:] == 'xlsx']

print("Excel files in this directory are :", files_xlsx)

y = "XXXX"

excels = [pd.ExcelFile(y +'\\'+ name) for name in files_xlsx]

for each in excels:
    sheets =pd.ExcelFile(each).sheet_names

print ("Sheet names in these excel files are : ", sheets)

NSheets = len(sheets)

print ("Number of different Sheet names in these excel files are : ", NSheets)

for z in sheets:
        frames = [x.parse(x.sheet_names[i], header=None,index_col=None) for x in excels]
        frames[1:] = [df[1:] for df in frames[1:]]
        combined = pd.concat(frames)
        combined.to_excel("XXXX\\Output_" + z + ".xlsx", header=False, index=False)

Это приводит к тому, что несколько файлов создаются с разными именами листов, но все эти листы имеют те же данные, что и на листе 1. Данные не верны.

1 Ответ

0 голосов
/ 26 апреля 2019

Я не уверен на 100%, полностью ли я понимаю ваш вопрос, но я читаю его так, как вы хотите. 1 Выведите файл Excel на каждый ввод уникального имени листа Excel.Если так, то попробуйте это:

import os
import pandas as pd

files = os.listdir("XXXX")

print("All files in the given directory are :", files)

files_xlsx = [f for f in files if f[-4:] == 'xlsx']

print("Excel files in this directory are :", files_xlsx)

y = "XXXX"

excels = [pd.ExcelFile(y +'\\'+ name) for name in files_xlsx]

for each in excels:
    sheets =pd.ExcelFile(each).sheet_names


print ("Sheet names in these excel files are : ", sheets)

NSheets = len(sheets)

print ("Number of different Sheet names in these excel files are : ", NSheets)

for z in sheets:
    frames = list()
    for x in excels:
        try:
            x.sheet_names.index(z)
            frames.append(x.parse(x.sheet_names.index(z), header=None, index_col=None))
            frames[1:] = [df[1:] for df in frames[1:]]  # keep only header from first file for each sheetname
            combined = pd.concat(frames)
            combined.to_excel("XXXX\\Output_" + z + ".xlsx", header=False, index=False)
        except:
          pass

Если я правильно понял ваш вопрос, тогда это должно сделать то, что вы хотите.

PS: Я добавил обратно строку, ранее удаленную (сохраняятолько первый заголовок) и он, кажется, делает так, как хотелось бы для моего небольшого тестового образца

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