【问题标题】:How to read separate Excel sheets into separate DataFrames?如何将单独的 Excel 工作表读入单独的 DataFrame?
【发布时间】:2021-07-22 09:22:06
【问题描述】:

我有一个包含 13 个选项卡的 Excel 文件,我想编写一个函数,从文件中获取指定的工作表,将它们转换为单独的 DataFrame,然后将它们捆绑到 DataFrame 列表中。在这种情况下,我想获取标有“tblProviderDetails”、“tblSubmissionStatus”和“Data Validation Ref Data”的表格,将它们转换为 DataFrames 并制作一个列表。我希望将 dfs 放在列表中的原因是,我最终想要获取输入的 dfs 并返回一个字典,然后该字典将用于创建 YAML 文件。

这最终是我想要的:

dfs = [ 'tblProviderDetails', 'tblSubmissionStatus', 'Data Validation Ref Data']

我想使用用户定义函数的原因是我希望灵活地将任何工作表和任何数量的工作表调用到列表中。

我能够编写一个将单个指定工作表转换为数据框的函数,但我不确定如何在 Excel 文件中调用任意数量的工作表或在函数中创建一个列表。这是据我所知:

def read_excel(path, sheet_name, header):
    dfs = pd.read_excel(path, sheet_name=sheet_name, header=header)
    return dfs

df1 = read_excel(path=BASEDIR, sheet_name='tblProviderDetails', header=2)
df2 = read_excel(path=BASEDIR, sheet_name='tblSubmissionStatus', header=2)
df3 = read_excel(path=BASEDIR, sheet_name='Data Validation Ref Data', header=2)

感谢您的帮助。

【问题讨论】:

    标签: python excel pandas


    【解决方案1】:

    有多种方法可以做到这一点,但也许最简单的方法是首先获取所有工作表名称,然后在每个工作表名称的循环中,将结果加载到数据框中并将其附加到所需的列表中。

    dfList = []
    def read_excel(path, h):
        xls = pd.ExcelFile(path)
    
        # Now you can access all sheetnames in the file
        sheetsList = xls.sheet_names
        # ['sheet1', 'sheet2', ...]
    
        for sheet in sheetsList:
            dfList.append(pd.read_excel(path, sheet_name=sheet, header 
            =h))
    read_excel('book.xlsx',2)
    print(dfList)
    

    【讨论】:

    • 如何调用特定的 Excel 工作表?我会在上面的函数中添加这些行吗?抱歉,还有点不清楚
    • 已编辑答案,再次检查。
    • 上面的代码会自动读取一个excel文件中的所有excel表,将它们转换为数据框,然后全部添加到数据框列表中,我相信这就是你想要的。跨度>
    • pd.read_excel 中的参数 'sheet_name' 可用于多个工作表,方法是传递您要使用的特定工作表列表。在您的情况下,它将是 sheet_name =[ 'tblProviderDetails', 'tblSubmissionStatus', 'Data Validation Ref Data']。
    • @umar 我不希望它自动读取所有表格。我希望该功能能够读取任何表格组合。在这种情况下,我希望工作表名称为:'tblProviderDetails'、'tblSubmissionStatus'、'Data Validation Ref Data'。
    【解决方案2】:

    您可以将工作表名称和\或工作表编号的列表传递给参数 sheet_name。

    def read_excel(path, sheet_name, header):
        sheet_name = ['tblProviderDetails','tblSubmissionStatus','Data Validation 
        Ref Data']
        dfs = pd.read_excel(path, sheet_name=sheet_name, header=header)
        return dfs      
    

    【讨论】:

    • 我可以在函数之外和调用期间传递工作表名称列表吗?即read_excel(BASEDIR, sheet_name = ['tblProviderDetails','tblSubmissionStatus','Data Validation Ref Data'], header=2) 并将 sheet_name 留在函数内作为空列表sheet_name=[]
    • 我认为你的 BASEDIR 对于所有工作表都是相同的,因此不需要 df1、df2 等。在函数内部或外部的工作表列表应该可以工作。将返回的是指定工作表名称的数据框。
    • BASEDIR 是 excel 文件的文件路径。如果我在函数调用中添加工作表名称并打印输出,我会得到OrderedDict()。但是当工作表名称在函数内部并且我删除了sheet_name 参数时,输出看起来是正确的。我希望能够将工作表名称添加到函数调用的原因是为了增加灵活性/可用性,但我无法让它工作。
    • 您应该在回答中更详细地解释您的代码的作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多