web-dev-qa-db-ja.com

ExcelFile対read_Excel in pandas

私はpandasに飛び込み、実験します。Excelファイルからデータを読み取ることに関しては、ExcelFileをread_Excelに使用することの違いは何でしょうか。両方のケースで、ドキュメントは同じ方法について説明しています:「ExcelテーブルをDataFrameに読み込む」および「Excelテーブルをpandas DataFrameに読み込む"。( read_Excelのドキュメント 、および Excel_fileの場合

ここでSOを使用し、違いに対処せずに使用します。また、Google検索では、この問題を説明する結果が得られませんでした。

私のテストでWRT、これらは同等のようです:

path = "test/dummydata.xlsx"
xl = pd.ExcelFile(path)
df = xl.parse("dummydata")  # sheet name

そして

path = "test/dummydata.xlsx" 
df = pd.io.Excel.read_Excel(path, sheetname=0)

後者は私に行を節約するという事実以外に、2つの間に違いはありますか、どちらかを使用する理由はありますか?

ありがとう!

14
Optimesh

構文以外に特に違いはありません。技術的には、ExcelFileはクラスであり、read_Excelは関数です。どちらの場合でも、実際の解析はExcelFile内で定義された_parse_Excelメソッドによって処理されます。

パンダの以前のバージョンでは、 read_Excel は完全に単一のステートメント(コメントを除く)で構成されていました。

return ExcelFile(path_or_buf,kind=kind).parse(sheetname=sheetname,
                                              kind=kind, **kwds)

そして、 ExcelFile.parseExcelFile._parse_Excelを呼び出す以上のことはしませんでした。

パンダの最近のバージョンでは、 read_ExcelExcelFileオブジェクトを持っていることを確認し(そうでない場合は作成します)、_parse_Excelを呼び出します直接メソッド:

if not isinstance(io, ExcelFile):
    io = ExcelFile(io, engine=engine)

return io._parse_Excel(...)

そして、更新された(統一された)パラメータ処理により、 ExcelFile.parse は実際にはただ1つのステートメントです。

return self._parse_Excel(...)

それがExcelFile.parseのドキュメントが今言う理由です

Read_Excel(ExcelFile、...)と同等受け入れられたパラメーターの詳細については、read_Excel docstringを参照してください

ループ内でExcelFile.parseが高速であると主張する 別の答え については、それは本当にExcelFileオブジェクトを毎回ゼロから作成しているかどうかにかかっています。ループ外でExcelFileを一度作成し、ループ内でread_Excelthatを渡すことは確かです。

xl = pd.ExcelFile(path)
for name in xl.sheet_names:
    df = pd.read_Excel(xl, name)

これは次と同等です

xl = pd.ExcelFile(path)
for name in xl.sheet_names:
    df = xl.parse(name)

ループに異なるパスが含まれる場合(つまり、1つのワークブック内の複数のシートだけでなく、多くの異なるワークブックを読んでいる場合)、とにかく各パスに新しいExcelFileインスタンスを作成する必要はありません。もう一度、ExcelFile.parseread_Excelの両方が同等になります(同様に低速になります)。

20
John Y

ExcelFile.parseは高速です。

ループでデータフレームを読み込んでいるとします。 ExcelFile.parseExcelfileオブジェクト(あなたの場合はxl)を渡すだけです。したがって、Excelシートは一度ロードされるだけで、これを使用してデータフレームを取得します。 Read_Excelの場合、Excelfileオブジェクトの代わりにパスを渡します。したがって、基本的にはワークブックが再度ロードされるたびに。ブックに大量のシートと数万行がある場合、混乱を招きます。

11
Pranav Kohli

Pandas Excelの最初の実装では2ステップのプロセスを使用しましたが、read_Excelという1ステップのプロセスを追加しました。

4
Bob Haffner