Python(pandas)でExcelファイルを読み込んでDataFrameにする

目次

  1. 準備
  2. read_excel関数
  3. ファイル名だけを指定して読み込む
  4. 列のヘッダ行を指定する
  5. 列のヘッダの内容を指定する
  6. 別のシートを読み込む
  7. すべてのシートをまとめて読み込む
  8. 複数のシートを読み込む

準備

PandasでExcelファイル(xlsx)にアクセスするときに、openpyxlなどの外部モジュールが必要になります。 pipなどでインストールしてください。

read_excel関数

read_excel関数でExcelファイルを読み込んでDataFrameにします。

read_excel関数にはたくさんの引数があるのですが、まずは基本的な引数を設定して読み込んでみます。

read_excel関数で使用頻度が高そうな引数を抜粋して紹介します。

import pandas as pd

df = pd.read_excel(io, [sheet_name], [header], [names])

引数

内容

io

strなど

ファイル名、Excelオブジェクト、パスなど、読み込みたいExcelファイル。

sheet_name

str, listなど

読み込むシートの指定。規定値は0。シート番号を指定する場合はintで指定する。0始まりであることに注意。シート名をstrで指定することもできる。複数読み込むときはlistにシート番号かシート名を連ねて指定する。Noneを指定すると、シート名をキーにした辞書を返す。

header

int, list

ヘッダにする列の指定。規定値は0。

names

array

列名の指定。規定値はNone。

df

DataFrame

読み込んだ結果のDataFrame。

引数のうちioは必須です。ファイルを読み込む関数なのですから、どこから読み込むかを指定する必要があります。

その他の引数は任意です。

読み込み例

下図のような2つのシートを含むpandas_trial.xlsxという名前のxlsxファイルを作り、pandas.read_excel関数で読み込んでみます。

実行環境は、VisualStudioCode上のJupyter環境です。

Sheet1 Sheet2

ファイル名だけを指定して読み込む

ファイル名だけを引数に指定して読み込んでみます。

import pandas as pd

df = pd.read_excel('pandas_trial.xlsx')

print(type(df))
df.head()
読み込み結果

1つ目のシートの内容がDataFrameとして読み込まれました。

シートのC列には隣のセルの文字数をカウントするExcel関数が記載されているのですが、関数ではなくて計算結果が読み込まれました。

列のヘッダ行を指定する

読み込んだDataFrameを見てみると、Excelのシートの1行目が各列のヘッダになってしまいました。

header引数にNoneを指定して、ヘッダ行無しとして読み込んでみます。

import pandas as pd

df = pd.read_excel('pandas_trial.xlsx', header=None)

print(type(df))
df.head()
ヘッダ行指定での読み込み結果(ヘッダ行無し)

シートの1行目がデータとして読み込まれました。

ちなみに、header引数に数値を指定するとその行が列ヘッダとして読み込まれます。0始まりであることに注意してください。

シートの3行目(「たこ」の行)をヘッダとして読み込んでみます。

import pandas as pd

df = pd.read_excel('pandas_trial.xlsx', header=2)

print(type(df))
df.head()
ヘッダ行指定での読み込み結果

列のヘッダの内容を指定する

各列のヘッダの表記が数字では味気ないので、names引数を使ってヘッダの内容を指定してみます。

import pandas as pd

df = pd.read_excel('pandas_trial.xlsx', header=None, names=['数字','文字','文字数'])

print(type(df))
df.head()
ヘッダの表記を指定

別のシートを読み込む

Excelファイルにはシートが2つ含まれていました。そこでsheet_name引数にシートの番号を指定して、2つ目のシートを読み込んでみます。

import pandas as pd

df = pd.read_excel('pandas_trial.xlsx', sheet_name=1, header=0)
print(type(df))
df.head()
シート2を読み込む

Excelのシートの番号は1から始まりますが、sheet_name引数に指定する場合は0から始まります。

実際にはシート番号よりもシート名で指定することが多いように思いますので、シート名で指定してみます。

import pandas as pd

df = pd.read_excel('pandas_trial.xlsx', sheet_name='伸び率', header=0)
print(type(df))
df.head()
シート名を指定して読み込む

ところで、Excelでは非表示になっている「日野」や「いすゞ」も読み込まれていますね。

すべてのシートをまとめて読み込む

各シートごとに読み込むのではなくて、複数のシートをまとめて読み込んでみます。sheet_name引数のNoneを指定すると、すべてのシートを読み込みます。

import pandas as pd

df = pd.read_excel('pandas_trial.xlsx', sheet_name=None)
print(type(df))
print(df.keys())
print(type(df['数え歌']))
すべてのシートを読み込む

sheet_nameにNoneを指定して全てのシートを読み込むと、read_excel関数の戻り値は辞書(dict)になります。Keyはシート名、Valueはそのシートを読み込んだDataFrameです。

複数のシートを読み込む

Excelファイル内の全てのシートを読み込む必要はないけれども複数のシートをまとめて読み込みたい場合は、sheet_name引数にシート番号かシート名のリストを渡します。

import pandas as pd

df = pd.read_excel('pandas_trial.xlsx', sheet_name=['伸び率','数え歌'])
print(type(df))
print(df.keys())
df
複数のシートを読み込む

公開日

広告