224

新しいバージョンの Pandas は、次のインターフェイスを使用してExcel ファイルを読み込みます。

read_excel('path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA'])

しかし、利用可能なシートがわからない場合はどうすればよいですか?

たとえば、次のシートのExcelファイルを使用しています

データ 1、データ 2 ...、データ N、foo、bar

Nしかし、私は先験的に知りません。

Pandas の Excel ドキュメントからシートのリストを取得する方法はありますか?

4

11 に答える 11

383

ExcelFileクラス (およびsheet_names属性)は引き続き使用できます。

xl = pd.ExcelFile('foo.xls')

xl.sheet_names  # see all sheet names

xl.parse(sheet_name)  # read a specific sheet to DataFrame

その他のオプションについては、パースのドキュメントを参照してください...

于 2013-07-31T18:01:21.350 に答える
4

Excel (xls.、xlsx) からシート名を取得する最も簡単な方法は次のとおりです。

tabs = pd.ExcelFile("path").sheet_names 
print(tabs)enter code here

次に、特定のシートのデータを読み取って保存するには (シート名は「Sheet1」、「Sheet2」など)、たとえば「Sheet2」とします。

data = pd.read_excel("path", "Sheet2") 
print(data)
于 2021-08-12T20:13:59.783 に答える
2
#It will work for Both '.xls' and '.xlsx' by using pandas

import pandas as pd
excel_Sheet_names = (pd.ExcelFile(excelFilePath)).sheet_names

#for '.xlsx' use only  openpyxl

from openpyxl import load_workbook
excel_Sheet_names = (load_workbook(excelFilePath, read_only=True)).sheet_names
                                      
于 2021-12-07T11:58:40.983 に答える
2

もし、あんたが:

  • パフォーマンスを気にする
  • 実行時にファイル内のデータは必要ありません。
  • 独自のソリューションを導入するのではなく、従来のライブラリを使用したい

以下は、〜10Mbxlsxxlsbファイルでベンチマークされました。

xlsx, xls

from openpyxl import load_workbook

def get_sheetnames_xlsx(filepath):
    wb = load_workbook(filepath, read_only=True, keep_links=False)
    return wb.sheetnames

ベンチマーク: ~ 14 倍の速度向上

# get_sheetnames_xlsx vs pd.read_excel
225 ms ± 6.21 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
3.25 s ± 140 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

xlsb

from pyxlsb import open_workbook

def get_sheetnames_xlsb(filepath):
  with open_workbook(filepath) as wb:
     return wb.sheets

ベンチマーク: ~ 56x の速度向上

# get_sheetnames_xlsb vs pd.read_excel
96.4 ms ± 1.61 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
5.36 s ± 162 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

ノート:

于 2020-11-09T21:24:03.287 に答える