私はPythonのパンダを使って処理している大きなスプレッドシートファイル(.xlsx)を持っています。その大きなファイルには2つのタブからのデータが必要です。タブの1つに大量のデータがあり、もう1つのタブには数個の正方形のセルしかありません。
pd.read_Excel() onanyのワークシートを使用すると、ファイル全体がロードされているように見えます(単なるファイルではありません)。興味のあるワークシート)そのため、このメソッドを2回(各シートに1回)使用すると、(指定されたシートのみを使用している場合でも)ワークブック全体が2回読み込まれることになります。
私はそれを間違って使用していますか、それはこのように制限されていますか?
ありがとうございました!
試してください 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}
辞書として返されます。
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
シートのインデックスを使用することもできます。
xls = pd.ExcelFile('path_to_file.xls')
sheet1 = xls.parse(0)
最初のワークシートを渡します。 2番目のワークシートの場合:
sheet2 = xls.parse(1)
シート名をパラメータとして指定することもできます。
data_file = pd.read_Excel('path_to_file.xls', sheetname="sheet_name")
シート "sheet_name"のみをアップロードします
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です。
はい、残念ながらそれは常にフルファイルをロードします。これを繰り返し行う場合は、シートを別々のCSVに抽出してから別々にロードするのが最善の方法です。このプロセスを d6tstack で自動化することもできます。これには、すべての列がすべてのシートまたは複数のExcelファイルで等しいかどうかを確認するなどの機能も追加されます。
import d6tstack
c = d6tstack.convert_xls.XLStoCSVMultiSheet('multisheet.xlsx')
c.convert_all() # ['multisheet-Sheet1.csv','multisheet-Sheet2.csv']
d6tstack Excelの例 を参照してください。