Python
pandas
Python3
Openpyxl

pythonでexcelファイル処理まとめ

はじめに

pandasを使ってインデックスとカラムが整理されていないexcelファイルの処理をする機会があったので、その方法をまとめます。
excelを処理する方法としてopenpyxlなんてのもありますが、.xlsファイルを読み込めなかったり、結局DataFrameの方が処理しやすいのでpandasを使用しています。

ファイル読み込み

import pandas as pd
file = pd.ExcelFile(filename, encoding='utf8')

シート読み込み

sheet_df = file.parse(sheet_name, header=None)

header=Noneは、最初の一行目をカラムとして読み込まないという意味です。カラムが整理されているデータならこちらのオプションはいらないかもしれません。

シート名の取得

全てのシートを利用したい場合は、file.sheet_namesでsheetの名前の配列が取得できるので、以下のように全てのシートをdfに格納することもできます。

sheet_names = file.sheet_names
for i, name in enumerate(sheet_names):
    sheet_df[i] = file.parse(name, header=None)

結合されたセルの扱い

また、結合されたセルでは、結合セル中の左上のセルのみデータが入っており、他はNaNとして扱われます。
例えば、以下のようなセルをpandasで読み込むと、
スクリーンショット 2017-12-04 11.34.35.png
全て結合セル中の最も左上のセルにのみデータが入っているとみなされ、次のようなDataFrameになります。
スクリーンショット 2017-12-04 11.43.38.png

シートのデータ取得

# 以下の返り値はseries
# n行目取得
sheet_def.iloc[n]
# n列目取得
sheet_def.iloc[:, n]

# m行n列のデータ取得
sheet_df.iloc[m, n]

この他、ilocを使えばスライスのように行と列を指定できます。

シートのデータ処理

# 行ごとに処理
for i, row in sheet_def.iterrows():
    print(i, row)

# 列ごとに処理
for i, col in sheet_def.iteritems():
    print(i, col)

おわりに

pandasで読み込みさえすればあとはDataFrameとして扱えるので便利です。