web-dev-qa-db-ja.com

同じワークブックの複数のワークシートに対するpd.read_Excel()へのPandasの使用

私はPythonのパンダを使って処理している大きなスプレッドシートファイル(.xlsx)を持っています。その大きなファイルには2つのタブからのデータが必要です。タブの1つに大量のデータがあり、もう1つのタブには数個の正方形のセルしかありません。

pd.read_Excel() onanyのワークシートを使用すると、ファイル全体がロードされているように見えます(単なるファイルではありません)。興味のあるワークシート)そのため、このメソッドを2回(各シートに1回)使用すると、(指定されたシートのみを使用している場合でも)ワークブック全体が2回読み込まれることになります。

私はそれを間違って使用していますか、それはこのように制限されていますか?

ありがとうございました!

89
HaPsantran

試してください pd.ExcelFile

xls = pd.ExcelFile('path_to_file.xls')
df1 = pd.read_Excel(xls, 'Sheet1')
df2 = pd.read_Excel(xls, 'Sheet2')

@HaPsantranで述べたように、Excelファイル全体がExcelFile()呼び出し中に読み込まれます(これを回避する方法はないようです)。これは単に、あなたが新しいシートにアクセスしたいときに毎回同じファイルを読まなければならないことからあなたを救うだけです。

pd.read_Excel()へのsheet_name引数はシートの名前(上記のように)、シート番号を指定する整数(0、1など)、シート名またはインデックスのリスト、またはNoneになります。リストが提供されるならば、それはキーがシート名/インデックスでありそして値がデータフレームである辞書を返します。デフォルトは単に最初のシート(つまりsheet_name=0)を返すことです。

Noneが指定されている場合、すべてのシートが{sheet_name:dataframe}辞書として返されます。

127
Noah

3つの選択肢があります。

  1. 最初のシートを直接データフレームに読み込む
  2. Excelファイルを読み、シートのリストを入手してください。それからシートを選んでロードします。
  3. すべてのシートを読み、それを辞書に保存してください。

コードサンプル:

import pandas as pd

df = pd.read_Excel('Excel_file_path.xls')
# this will read the first sheet into df

xls = pd.ExcelFile('Excel_file_path.xls')

# Now you can list all sheets in the file
xls.sheet_names
# ['house', 'house_extra', ...]

# to read just one sheet to dataframe:
df = pd.read_Excel(file_name, sheetname="house")

# to read all sheets to a map
sheet_to_df_map = {}
for sheet_name in xls.sheet_names:
    sheet_to_df_map[sheet_name] = xls.parse(sheet_name)

更新:

# @ihightower pointed out in the comments that all sheets can be 
# directly read into an ordered dictionary in 1 step

# for pandas version >= 0.21.0
sheet_to_df_map = pd.read_Excel(file_name, sheet_name=None)

# for pandas version < 0.21.0
sheet_to_df_map = pd.read_Excel(file_name, sheetname=None)

更新2:指摘してくれてありがとう@toto_tico。

sheetname:文字列、整数値、文字列/整数の混在リスト、またはなし、デフォルト0バージョン0.21.0以降廃止予定:代わりにsheet_nameを使用してください Source Link

58
Vikash Singh

シートのインデックスを使用することもできます。

xls = pd.ExcelFile('path_to_file.xls')
sheet1 = xls.parse(0)

最初のワークシートを渡します。 2番目のワークシートの場合:

sheet2 = xls.parse(1)
25
Elliott

シート名をパラメータとして指定することもできます。

data_file = pd.read_Excel('path_to_file.xls', sheetname="sheet_name")

シート "sheet_name"のみをアップロードします

19
Mat0kan
pd.read_Excel('filename.xlsx') 

デフォルトでは、ワークブックの最初のシートを読みます。

pd.read_Excel('filename.xlsx', sheet_name = 'sheetname') 

ワークブックの特定のシートを読み、

pd.read_Excel('filename.xlsx', sheet_name = None) 

すべてのワークシートをExcelからpandasデータフレームに読み取ります。OrderedDictのタイプはネストされたデータフレームを意味し、すべてのワークシートはデータフレーム内で収集されたデータフレームであり、そのタイプはOrderedDictです。

3
Ashu007

はい、残念ながらそれは常にフルファイルをロードします。これを繰り返し行う場合は、シートを別々のCSVに抽出してから別々にロードするのが最善の方法です。このプロセスを d6tstack で自動化することもできます。これには、すべての列がすべてのシートまたは複数のExcelファイルで等しいかどうかを確認するなどの機能も追加されます。

import d6tstack
c = d6tstack.convert_xls.XLStoCSVMultiSheet('multisheet.xlsx')
c.convert_all() # ['multisheet-Sheet1.csv','multisheet-Sheet2.csv']

d6tstack Excelの例 を参照してください。

1
citynorman