【问题标题】:How do I create several DataFrames for each sheet in an Excel file?如何为 Excel 文件中的每个工作表创建多个 DataFrame?
【发布时间】:2019-02-06 00:16:13
【问题描述】:

我有一个包含几张工作表的 Excel 文件。我想遍历 Excel 文件的每个工作表并为文件中的每个工作表创建一个 DataFrame。另外,我希望将 DataFrames 命名为“hfi_(工作表名称)”。这是我到目前为止编写的 for 循环,但由于语法错误,它没有运行。你能帮我解决这个问题吗?

for sheet in hfi_file:    
  hfi_file=pd.read_excel("/Users/glosophy/Desktop/hfi/hfi_2016.xlsx",sheet_name=sheet)
return str("hfi"+sheet)=pd.DataFrame(hfi_file)

【问题讨论】:

标签: python excel pandas dataframe


【解决方案1】:

您需要先导入 Excel 文件,然后按名称读取每个工作表

multi_sheet_file = pd.ExcelFile("/Users/glosophy/Desktop/hfi/hfi_2016.xlsx")

# Gets the sheet names in the file
excel_sheet_names = multi_sheet_file.sheet_names

dict_of_sheets = {}
for sheet in excel_sheet_names:
    dict_of_sheets["hfi" + sheet] = pd.read_excel(multi_sheet_file, sheetname=sheet')

【讨论】:

  • 成功了!我想知道现在如何将字典变成 DataFrames ......键是 DataFrames 的名称和数据的值。谢谢!
  • 这个想法是根据需要从字典中按名称访问 dfs,但如果您的意思是要为每个变量创建常规变量,请参阅:stackoverflow.com/questions/18090672/…
【解决方案2】:

我建议将这些数据帧存储到dict

d={"hfi" + sheet:pd.DataFrame(pd.read_excel("/Users/glosophy/Desktop/hfi/hfi_2016.xlsx", sheet_name=sheet)) for sheet in hfi_file}

然后就可以使用.get来访问数据了

d.get('your dict key')

【讨论】:

    【解决方案3】:

    我的平局显然很慢,但这是另一个答案:

    import pandas as pd
    
    # importing these so sessionInfo comes up for them
    import openpyxl
    import xlrd
    
    file = 'output.xlsx'
    df1 = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
    df2 = pd.DataFrame({'sheet2-col1': [0, 1], 'sheet2-col2': [30, 40]})
    
    writer = pd.ExcelWriter(file)
    df1.to_excel(writer, 'Sheet1')
    df2.to_excel(writer, 'Sheet2')
    writer.save()
    
    reader = pd.ExcelFile(file)
    dict = {"hfi" + i : pd.read_excel(file, sheet_name=i) for i in reader.sheet_names}
    print(dict)
    #> {'hfiSheet1':    col1  col2
    #> 0     1     3
    #> 1     2     4, 'hfiSheet2':    sheet2-col1  sheet2-col2
    #> 0            0           30
    #> 1            1           40}
    

    reprexpy package于 2018-08-30 创建

    import reprexpy
    print(reprexpy.SessionInfo())
    #> Session info --------------------------------------------------------------------
    #> Platform: Darwin-17.7.0-x86_64-i386-64bit (64-bit)
    #> Python: 3.6
    #> Date: 2018-08-30
    #> Packages ------------------------------------------------------------------------
    #> openpyxl==2.5.6
    #> pandas==0.23.4
    #> reprexpy==0.1.1
    #> xlrd==1.1.0
    

    【讨论】:

      【解决方案4】:

      这是我可以与您分享的最简单的方法:

      # read the sheet file
      import pandas as pd
      sheets = pd.ExcelFile('sheet_filename.xlsx')
      
      # save each sheet to a dataframe
      df1 = pd.read_excel(sheets, 'Sheet1')
      df2 = pd.read_excel(sheets, 'Sheet2')
      

      希望这对您有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-23
        • 1970-01-01
        • 2018-07-27
        • 2019-04-23
        • 1970-01-01
        • 2013-06-22
        • 2021-06-04
        • 1970-01-01
        相关资源
        最近更新 更多