【问题标题】:Python: Store multiple dataframe in listPython:将多个数据框存储在列表中
【发布时间】:2018-06-21 00:52:14
【问题描述】:

我有一个循环读取文档中的 Excel 工作表。我想将它们全部存储在一个列表中:

  DF_list= list()

  for sheet in sheets:
     df= pd.read_excel(...)
     DF_list = DF_list.append(df)

如果我输入:

[df df df df]

它有效。

对不起,我有 Matlab 背景,不太习惯 Python,但我喜欢它。 谢谢。

【问题讨论】:

  • DataFrame 是 pandas 中的一个重要类:pandas.pydata.org/pandas-docs/stable/generated/…。您应该将对象命名为 df / mydf 等其他名称。
  • 在尝试编写任何代码之前请阅读 Python 文档。在您的情况下,您应该阅读list 的文档。或者直接从解释器运行help([].append)

标签: python list pandas dataframe store


【解决方案1】:

.append() 修改列表并返回None。 您在第一个循环中用None 覆盖DF_list,并且附加将在第二个循环中失败。

因此:

DF_list = list()

for sheet in sheets:
    DF_list.append(pd.read_excel(...))

或者使用列表推导:

DF_list = [pd.read_excel(...) for sheet in sheets] 

【讨论】:

  • 公平地说,他还解释了为什么代码不起作用。这对初学者非常有用。
【解决方案2】:

试试这个

DF_list= list()

for sheet in sheets:

   df = pd.read_excel(...)

   DF_list.append(df)

或者对于更紧凑的python,可能会这样做

DF_list=[pd.read_excel(...) for sheet in sheets]

【讨论】:

    【解决方案3】:

    如果你要使用参数sheet_name=None:

    dfs = pd.read_excel(..., sheet_name=None)
    

    它将返回一个数据框字典:

    sheet_name : string, int, mixed list of strings/ints, or None, default 0
    
        Strings are used for sheet names, Integers are used in zero-indexed
        sheet positions.
    
        Lists of strings/integers are used to request multiple sheets.
    
        Specify None to get all sheets.
    
        str|int -> DataFrame is returned.
        list|None -> Dict of DataFrames is returned, with keys representing
        sheets.
    
        Available Cases
    
        * Defaults to 0 -> 1st sheet as a DataFrame
        * 1 -> 2nd sheet as a DataFrame
        * "Sheet1" -> 1st sheet as a DataFrame
        * [0,1,"Sheet5"] -> 1st, 2nd & 5th sheet as a dictionary of DataFrames
        * None -> All sheets as a dictionary of DataFrames
    

    【讨论】:

      【解决方案4】:

      完整的解决方案如下:

      # (0) Variable containing location of excel file containing many sheets
      excelfile_wt_many_sheets = 'C:\this\is\my\location\and\filename.xlsx'
      
      # (1) Initiate empty list to hold all sheet specific dataframes
      df_list= []
      
      # (2) create unicode object 'sheets' to hold all sheet names in the excel file
      df = pd.ExcelFile(excelfile_wt_many_sheets)
      sheets = df.sheet_names
      
      # (3) Iterate over the (2) to read in every sheet in the excel into a dataframe 
      #     and append that dataframe into (1)
      for sheet in sheets:
          df = pd.read_excel(excelfile_wt_many_sheets, sheet)
          df_list.append(df)
      

      【讨论】:

        【解决方案5】:

        实际上没有必要定义新的列表来存储一堆数据帧。应用于具有多张工作表的 excel 文件的 pandas.ExcelFile 函数返回 ExcelFile 对象,该对象是一个集合,可以将一堆数据帧放在一起。希望下面的代码有所帮助。

        df = pd.ExcelFile('C:\read_excel_file_with_multiple_sheets.xlsx')
        Sheet_names_list = df.sheet_names
        for sheet in Sheet_names_list :
           df_to_print = df.parse(sheet_name=sheet)
           print df_to_print
        

        【讨论】:

          猜你喜欢
          • 2018-02-05
          • 1970-01-01
          • 2019-10-19
          • 2018-09-23
          • 2022-01-02
          • 2020-04-29
          • 1970-01-01
          • 1970-01-01
          • 2021-01-29
          相关资源
          最近更新 更多