使用Pandas在python中读取Excel文件


144

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

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

这引发了一个错误,该错误表示预期有两个参数,我不知道第二个参数是什么,而且我在这里想要实现的是将Excel文件转换为DataFrame,我这样做是否正确?或者还有其他方法可以使用熊猫吗?

Answers:


222

关闭:首先调用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)

6
当我使用“ df = xl.parse(” Sheet1“)”时,它会自动将每一列的第一个单元格的值用作数据框的列名,如何指定自己的列名?
Rakesh Adhikesavan

2
在熊猫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吗?
皮德曼

2
如何防止将第一行变成标题?我试过使用该参数,headers=None但是虽然它没有破坏代码,但是也没有用。
Elliptica

8
我发现需要pip install xlrd才能起作用。xlrd软件包不随熊猫一起提供,因此,如果您没有出于其他目的安装它,则会收到“ ImportError:No module named xlrd”异常。无论如何,从Mac上的熊猫0.19.0起都是如此。
user5920660 '18

95

这是非常简单的方法。

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/genic/pandas.read_excel.html

FutureWarning:sheetname对于较新的Pandas版本,不推荐使用该关键字,请sheet_name改用。


20

以为我应该在这里添加,如果要访问行或列以遍历它们,可以执行以下操作:

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行。


13

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

import pandas as pd

# Read the excel sheet to pandas dataframe
DataFrame = pd.read_excel("PATH\FileName.xlsx", sheetname=0)

0

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

import pandas as pd

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

检出文档以浏览参数,例如skiprows在加载Excel时忽略行



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.