从多个Excel文件创建Pandas数据框架

3

嗨,这个问题与以下问题几乎完全相同:

从多个文件创建pandas数据框架

不同之处在于我想从Excel文件列表中读取数据。我有一个名为“filenames”的文件名列表,我想将它们合并成一个数据框。

我的代码如下:

import tkinter as tk
import pandas as pd
import tkinter.messagebox as tr 

from tkinter.filedialog import askopenfilename      

LARGE_FONT = ("Verdana", 12)

class BlahTest(tk.Tk):
    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        self.frames = {}
        frame = StartPage(container, self)
        self.frames[StartPage] = frame
        frame.grid(row=0, column=0, sticky="nsew")
        self.show_frame(StartPage)

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()

class StartPage(tk.Frame):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text="Add files to start compiling your report", font=LARGE_FONT)
        label.pack(pady=10,padx=10)

         button1 = tk.Button(self, text="Add Files", command=FileOperations.openFile)
        button1.pack()

 class FileOperations():

     def openFile():
        options = {}
    options['initialdir'] = 'C:\\Users\\Blah'
    options['filetypes'] = [('Excel files', '.xlsx')]
    options['multiple'] = 1
    global filenames
    filenames = tk.filedialog.askopenfilename(**options)

    if len(filenames) == 8: #checks if the user has selected exactly 8 files else shows errormessage
        PandasOperations.MergetoSingleDF

    else:
        tr.showerror("Wrong number of files","There should be exactly 8 files")

class PandasOperations():

def MergetoSingleDF():
    df_list = [pd.read_excel((file), sheetname=0) for file in filenames]
    big_df = pd.Dataframe()
    big_df = pd.concat(df_list)

    big_df

    writer = pd.ExcelWriter('C:\\Users\\Blah.xlsx', engine = 'xlsxwriter')
    big_df.to_excel(writer, sheet_name='Patch Summary by Server Report', index=False)
    workbook = writer.book
    worksheet = writer.sheets['Patch Summary by Server Report']
    writer.save()


app = BlahTest()
app.mainloop()

我的代码应该: - 获取8个Excel文件的列表 - 将每个Excel文件加载到对应的数据帧中,并将这些数据帧存储在一个新列表中 - 合并整个数据帧列表为一个数据帧 - 打印出新的大数据帧 - 将新的大数据帧保存到一个Excel文件中
很抱歉它没有给我任何错误信息 - 它似乎只是没有打印出数据帧或将其保存到Excel。
任何帮助都将不胜感激。

这段代码对我来说是有效的。你遇到了什么错误? - omri_saadon
你可能想要发布 http://stackoverflow.com/help/mcve ... - boardrider
好的,所以我刚刚修改了上面的代码以更好地展示我尝试做什么。但似乎无法将数据框架big_df打印或保存到Excel文件中。 - Davtho1983
好的,没有错误信息,这是我困惑的事情之一。我将在顶部发布整个代码。 - Davtho1983
你是不是想说PandasOperations().MergetoSingleDF(),而不是你目前写的PandasOperations.MergetoSingleDF? 另外,你的类成员函数(如def MergeToSingleDF())应该将self作为第一个参数接受。 - DonCristobal
显示剩余2条评论
1个回答

0
你是不是想说 PandasOperations().MergetoSingleDF() 而不是 PandasOperations.MergetoSingleDF,就像你目前写的那样?另外,你的类成员函数(例如 def MergeToSingleDF())应该将 self 作为第一个参数接受。

啊,好的 - 那很有道理,也很好地捕捉到了那个错误,但我担心代码仍然似乎无法工作。我想我需要pandastable - 或者也许我会放弃tkinter用于GUI。 - Davtho1983

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接