PandasでExcelファイルを読み込む!read_excel()でデータ分析を加速 🚀
ビジネスシーンで広く利用されるExcelファイル(.xlsx, .xls)は、データ分析において頻繁に遭遇する形式です。Pandasのread_excel()関数を使えば、これらのExcelファイルを簡単かつ柔軟に読み込み、強力なDataFrameとして扱うことができます。これにより、Excelで管理されたデータをPandasの豊富な機能で分析する道が開かれます。
この記事では、read_excel()の基本的な使い方から、複数シートの指定、特定の列の選択、ヘッダーの扱いなど、実践的なオプションまでを詳しく解説します。
pd.read_excel():Excelファイル読み込みの決定版 📥
pd.read_excel()は、Excelのワークブックからデータを読み込み、PandasのDataFrameとして返します。CSVファイルと同様に、多くのオプションが用意されており、様々なExcelファイルの構造に対応できます。
基本的な使い方
最もシンプルな使い方は、Excelファイルのパスを指定するだけです。デフォルトでは、ワークブックの最初のシートが読み込まれます。
import pandas as pd
# サンプルExcelファイルがないため、ここではCSVからの読み込みで代替します
# 実際のExcelファイル読み込みは下記のようにパスを指定します
# df = pd.read_excel('your_data.xlsx')
# 例として、read_csvで代替(Excelファイルがないため)
import io
excel_data_simulate = """Name,Age,City
Alice,25,Tokyo
Bob,30,Osaka
"""
df_excel = pd.read_csv(io.StringIO(excel_data_simulate))
print("--- 基本的なExcel読み込み (CSVで代替) ---")
print(df_excel)
read_excel()の便利なオプション 🛠️
read_excel()は、Excelファイルの複雑な構造に対応するための豊富なオプションを提供します。
1. sheet_name:シートの指定
ワークブック内に複数のシートがある場合、sheet_nameオプションで読み込むシートを指定できます。
-
シート名で指定:
'Sheet1' -
シートのインデックスで指定:
0(最初のシート, 0から始まる) -
複数のシートをリストで指定:
['Sheet1', 'Sheet2'](辞書形式で返される) -
全てのシートを読み込む:
None(辞書形式で返される)
import pandas as pd
# Excelファイルがないため、複数のCSVでシートをシミュレートします
import io
sheet1_data = """ID,Product
1,Pen
2,Book
"""
sheet2_data = """Region,Sales
East,100
West,150
"""
# 各シートのデータをDataFrameとして読み込む例 (実際はread_excelでシートを指定)
df_sheet1 = pd.read_csv(io.StringIO(sheet1_data))
df_sheet2 = pd.read_csv(io.StringIO(sheet2_data))
print("--- シート1の読み込み (シミュレート) ---")
print(df_sheet1)
print("\n--- シート2の読み込み (シミュレート) ---")
print(df_sheet2)
# 複数のシートを読み込む場合 (実際は`df_dict = pd.read_excel('multi_sheet.xlsx', sheet_name=['Sheet1', 'Sheet2'])`)
# print("\n--- 複数のシートを辞書として読み込む場合 (シミュレート結果) ---")
# df_dict = {'Sheet1': df_sheet1, 'Sheet2': df_sheet2}
# for sheet_name, df in df_dict.items():
# print(f"\nシート名: {sheet_name}")
# print(df)
2. header:ヘッダー行の指定
データにヘッダー行がない場合や、特定の行をヘッダーとして使いたい場合に指定します。
-
header=None: ヘッダーなしで読み込み、0から始まる整数が列名になります。 -
header=行番号: 指定した行をヘッダーとして読み込みます(0始まりのインデックス)。
import pandas as pd
import io
no_header_excel = """1,Apple,100
2,Banana,150
"""
df_no_header = pd.read_csv(io.StringIO(no_header_excel), header=None, names=['ID', 'Fruit', 'Price'])
print("\n--- ヘッダーなしのExcel読み込み (CSVで代替) ---")
print(df_no_header)
3. names:列名の指定
header=Noneと組み合わせて、自分で列名を指定したい場合に利用します。
# 上の例 (`header=None`と組み合わせた`names`の例) を参照してください。
4. usecols:読み込む列の指定
特定の列だけを読み込みたい場合にusecolsオプションを使います。列名や列のインデックス、または範囲で指定できます。
import pandas as pd
import io
data_cols = """colA,colB,colC,colD
1,2,3,4
5,6,7,8
"""
# colAとcolCだけを読み込む (CSVで代替)
df_selected_cols = pd.read_csv(io.StringIO(data_cols), usecols=['colA', 'colC'])
print("\n--- 特定の列だけを読み込む (CSVで代替) ---")
print(df_selected_cols)
# 列のインデックスで指定する場合 (例: 0番目と2番目の列)
# df_selected_indices = pd.read_excel('your_data.xlsx', usecols=[0, 2])
5. dtype:データ型の指定
Excelファイルから読み込む際に、特定の列を特定のデータ型として扱いたい場合にdtypeオプションを指定します。
import pandas as pd
import io
data_types = """id,value
1,10.5
2,20.0
"""
# 'id'をint32、'value'をfloat32で読み込む (CSVで代替)
df_typed = pd.read_csv(io.StringIO(data_types), dtype={'id': 'int32', 'value': 'float32'})
print("\n--- データ型を指定して読み込む (CSVで代替) ---")
print(df_typed.dtypes)
6. skiprows / nrows:読み込む行範囲の指定
-
skiprows: ファイルの先頭から指定した行数だけスキップして読み込みます。 -
nrows: 指定した行数だけ読み込みます。大きなファイルの一部だけを確認したい場合に便利です。
import pandas as pd
import io
large_data = """A,B
1,10
2,20
3,30
4,40
5,50
6,60
"""
# 最初の2行をスキップして3行だけ読み込む (CSVで代替)
df_partial = pd.read_csv(io.StringIO(large_data), skiprows=2, nrows=3)
print("\n--- 特定の行範囲を読み込む (CSVで代替) ---")
print(df_partial)
7. engine:使用するエンジンの指定
Excelファイルのバージョンや形式によっては、読み込みエンジンを明示的に指定する必要がある場合があります。
-
'openpyxl':.xlsxファイルに推奨(デフォルト) -
'xlrd':.xlsファイルに推奨(古いExcel形式)
通常はPandasが自動で最適なエンジンを選択しますが、エラーが発生する場合は指定を検討します。
まとめ
Pandasのread_excel()関数は、Excelファイルからデータを読み込み、Pandasで分析可能な形式に変換するための強力で柔軟なツールです。
-
基本的な読み込み:
pd.read_excel('filename.xlsx') -
シートの指定:
sheet_name='SheetName'またはsheet_name=0 -
特定の列の選択:
usecols=['ColumnA', 'ColumnB'] -
ヘッダーの制御:
header=Noneなど -
データ型の指定:
dtype={'col_name': 'int'}
これらのオプションを使いこなすことで、Excelに保存された複雑なデータでも、Pandasのデータフレームとしてスムーズに取り込み、高度な分析を始めることができるでしょう。ぜひread_excel()をマスターして、データ分析の幅を広げてください!
