【问题标题】:Reading an Excel file in python using pandas使用 pandas 在 python 中读取 Excel 文件
【发布时间】:2013-06-08 10:40:44
【问题描述】:

我正在尝试以这种方式读取 excel 文件:

newFile = pd.ExcelFile(PATH\FileName.xlsx)
ParsedData = pd.io.parsers.ExcelFile.parse(newFile)

这会引发一个错误,说明需要两个参数,我不知道第二个参数是什么,而且我在这里想要实现的是将 Excel 文件转换为 DataFrame,我这样做是否正确?或者有没有其他方法可以使用 pandas 来做到这一点?

【问题讨论】:

    标签: python python-2.7 pandas


    【解决方案1】:

    我认为这应该可以满足您的需求:

    import pandas as pd
    
    # Read the excel sheet to pandas dataframe
    df = pd.read_excel("PATH\FileName.xlsx", sheet_name=0) #corrected argument name
    

    【讨论】:

    • 仅供参考,正确的参数名称是 sheet_name 而不是 sheetname
    【解决方案2】:

    所有这些都适合我

    In [1]: import pandas as pd
    
    In [2]: df = pd.read_excel('FileName.xlsx') # If there is only one sheet in the excel file
    
    In [3]: df = pd.read_excel('FileName.xlsx', sheet_name=0)
    
    In [4]: In [20]: df = pd.read_excel('FileName.xlsx', sheet_name='Sheet 1')
    

    【讨论】:

      【解决方案3】:

      我想我应该在这里补充一下,如果你想访问行或列来循环它们,你可以这样做:

      import pandas as pd
      
      # open the file
      xlsx = pd.ExcelFile("PATH\FileName.xlsx")
      
      # get the first sheet as an object
      sheet1 = xlsx.parse(0)
          
      # get the first column as a list you can loop through
      # where the is 0 in the code below change to the row or column number you want    
      column = sheet1.icol(0).real
      
      # get the first row as a list you can loop through
      row = sheet1.irow(0).real
      

      编辑:

      icol(i)irow(i) 方法现已弃用。您可以使用sheet1.iloc[:,i] 获取第 i 列,使用sheet1.iloc[i,:] 获取第 i 行。

      【讨论】:

        【解决方案4】:

        加载一个 excel 文件而不显式命名工作表,而是给出工作表顺序的编号(通常会简单地加载第一个工作表),如下所示:

        import pandas as pd
        myexcel = pd.ExcelFile("C:/filename.xlsx")
        myexcel = myexcel.parse(myexcel.sheet_names[0])
        

        由于.sheet_names 返回工作表名称列表,因此只需调用列表元素即可轻松加载一张或多张工作表。

        【讨论】:

          【解决方案5】:

          这是一个更新的方法,其语法在 python 代码中更常见。它还可以防止您多次打开同一个文件。

          import pandas as pd
          
          sheet1, sheet2 = None, None
          with pd.ExcelFile("PATH\FileName.xlsx") as reader:
              sheet1 = pd.read_excel(reader, sheet_name='Sheet1')
              sheet2 = pd.read_excel(reader, sheet_name='Sheet2')
          

          https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html

          【讨论】:

            【解决方案6】:
            import pandas as pd
            
            data = pd.read_excel (r'**YourPath**.xlsx')
            
            print (data)
            

            【讨论】:

              【解决方案7】:

              您只需将文件的路径提供给pd.read_excel

              import pandas as pd
              
              file_path = "./my_excel.xlsx"
              data_frame = pd.read_excel(file_path)
              

              签出the documentation 以探索skiprows 等参数以在加载excel 时忽略行

              【讨论】:

                【解决方案8】:

                这是非常简单易行的方法。

                import pandas
                df = pandas.read_excel(open('your_xls_xlsx_filename','rb'), sheetname='Sheet 1')
                # or using sheet index starting 0
                df = pandas.read_excel(open('your_xls_xlsx_filename','rb'), sheetname=2)
                

                查看文档的完整详细信息 http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

                FutureWarning:sheetname 关键字在 Pandas 较新版本中已弃用,请改用 sheet_name

                【讨论】:

                  【解决方案9】:

                  关闭:首先调用ExcelFile,然后调用.parse 方法并将工作表名称传递给它。

                  >>> xl = pd.ExcelFile("dummydata.xlsx")
                  >>> xl.sheet_names
                  [u'Sheet1', u'Sheet2', u'Sheet3']
                  >>> df = xl.parse("Sheet1")
                  >>> df.head()
                                    Tid  dummy1    dummy2    dummy3    dummy4    dummy5  \
                  0 2006-09-01 00:00:00       0  5.894611  0.605211  3.842871  8.265307   
                  1 2006-09-01 01:00:00       0  5.712107  0.605211  3.416617  8.301360   
                  2 2006-09-01 02:00:00       0  5.105300  0.605211  3.090865  8.335395   
                  3 2006-09-01 03:00:00       0  4.098209  0.605211  3.198452  8.170187   
                  4 2006-09-01 04:00:00       0  3.338196  0.605211  2.970015  7.765058   
                  
                       dummy6  dummy7    dummy8    dummy9  
                  0  0.623354       0  2.579108  2.681728  
                  1  0.554211       0  7.210000  3.028614  
                  2  0.567841       0  6.940000  3.644147  
                  3  0.581470       0  6.630000  4.016155  
                  4  0.595100       0  6.350000  3.974442  
                  

                  你正在做的是调用存在于类本身而不是实例上的方法,这没关系(虽然不是很惯用),但如果你这样做,你还需要传递工作表名称:

                  >>> parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")
                  >>> parsed.columns
                  Index([u'Tid', u'dummy1', u'dummy2', u'dummy3', u'dummy4', u'dummy5', u'dummy6', u'dummy7', u'dummy8', u'dummy9'], dtype=object)
                  

                  【讨论】:

                  • 当我使用 "df = xl.parse("Sheet1")" 时,它会自动将每列的第一个单元格的值作为数据框的列名,我如何指定自己的列名?跨度>
                  • 在 pandas 15.0.2 中,parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1") 不起作用并抛出错误 module object has no attribute ExcelFileparsed = pd.io.excel.ExcelFile.parse(xl, "Sheet1") 为我工作
                  • 不错。这几乎与使用openpyxl 实现相同的选项卡访问一样简洁。熊猫在后台调用 openpyxl 吗?
                  • 如何防止它把第一行变成标题?我尝试使用参数headers=None,但虽然它没有破坏代码,但它也不起作用。
                  • 我发现此功能需要 pip install xlrd。 xlrd 包不随 pandas 一起提供,因此如果您没有出于其他目的安装它,您将收到“ImportError: No module named xlrd”异常。无论如何,从 Mac 上的 pandas 0.19.0 开始都是如此。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-04-08
                  • 1970-01-01
                  • 2018-05-15
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多