使用pandas在python中读取Excel文件

时间:2013-06-12 10:42:12

标签: python python-2.7 pandas

我试图以这种方式阅读excel文件:

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

抛出一个错误,说明预期有两个参数,我不知道第二个参数是什么,我在这里想要实现的是将Excel文件转换为DataFrame,我是以正确的方式做到的吗?或者有没有其他方法可以使用熊猫?

9 个答案:

答案 0 :(得分:196)

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

答案 1 :(得分:81)

这是一种简单易行的方法。

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:对于较新的Pandas版本,不推荐使用sheetname关键字,而是使用sheet_name

答案 2 :(得分:18)

我想在此添加,如果你想访问行或列来遍历它们,你可以这样做:

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

答案 3 :(得分:12)

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

    public Credentials(string username, SecureString password)
    {
        this.username = username;
        this.password = password;
    }

    public Credentials(string username, string password)
    {
        this.username = username;
        this.password = new SecureString();
        // Creating the secure string
        Array.ForEach(password.ToCharArray(), this.password.AppendChar); ;
    }

答案 4 :(得分:0)

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

import pandas as pd

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

检出the documentation可以探索诸如skiprows之类的参数,以便在加载Excel时忽略行

答案 5 :(得分:0)

import pandas as pd

data = pd.read_excel (r'**YourPath**.xlsx')

print (data)

答案 6 :(得分:0)

这是语法已更新的方法,在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

答案 7 :(得分:0)

在不显式命名工作表的情况下加载excel文件,而是给出工作表的顺序号(通常只是简单地加载第一张工作表)就像这样:

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

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

答案 8 :(得分:0)

所有这些都对我有用

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')