パンダを使用してPythonでExcelファイルを読み取る


144

私はこの方法でExcelファイルを読み取ろうとしています:

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

これは、2つの引数が予期されていることを示すエラーをスローします。2番目の引数が何であるかがわかりません。また、ここで達成しようとしていることは、ExcelファイルをDataFrameに変換することです。またはパンダを使用してこれを行う他の方法はありますか?

回答:


223

閉じる:最初にを呼び出しますが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 2013年

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")私のために働く
Neil

いいね。これは、タブを使用して同じようにアクセスする方法とほぼ同じopenpyxlです。パンダは内部でopenpyxlを呼び出していますか?
パイダーマン2016年

2
最初の行をヘッダーに変換しないようにするにはどうすればよいですか?パラメータを使用してみましたheaders=Noneが、コードは壊れませんでしたが、機能しませんでした。
Elliptica

8
これが機能するには、pip install xlrdが必要であることを発見しました。xlrdパッケージにはパンダが付属していないため、他の目的でインストールしなかった場合は、「ImportError:No module named xlrd」という例外が発生します。いずれにしても、Macのパンダ0.19.0以降は真です。
user5920660 2018年

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/generated/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をロードするときに行を無視するなどのパラメーターを調べてください



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.