Python、Pandasを用いたExcelシート取り扱い

今日のお題

前回の記事ではPythonとPandasを使ってExcelファイルを読みましたが、今回はその詳しい解説とその続きです。

C++,C#などでそこそこ熟練したプログラマーPythonに初めて触れたときの感想、といった内容になってきました。

Excelシートの内容をDataFrameに変換

まずは前回記事のコードの解説からです。

# インポート
import pandas as pd
# ファイルのロード
filename = "C:\work\in\実験.xlsx"
file = pd.ExcelFile(filename, encoding='utf8')
# シートをDataFrame型として読み込んで、リストに格納
df_list = []
for sheet in file.sheet_names:
df_list.append(file.parse(sheet))

for ~ in file.sheet_namesでExcelファイル(ブック)内の各シートを列挙しています。

さらにfile.parse(sheet)でシートの内容をDataFrame型として読み取っているのですね。

この場所ですが、後でシート名も必要になりましたので

for sheet in file.sheet_names:
df_list.append( (sheetName, file.parse(sheetName)) )

と、名前とDataFrameを要素に持つタプルにして格納するよう変更しました。

データの構造にはいつも頭を悩まされますが、Pythonは分かりやすいですね。偉いぞPython

DataFrame内のデータ処理

次に、このように格納したデータをプログラムで処理することを考えます。

for文のinの前に2つ変数を書くことで、リスト内の要素として取得したタプルから、さらに2つの要素を取得出来ます。

# 各シートごとに処理
for sheetName, sheetdf in df_list:
    # 先ほど格納したシート名とDataFrameが取得される
    # DataFrameを行ごとに処理
    for index, row in sheetdf.iterrows():
        #indexが行番号、rowが行の内容
print(row) #とりあえず表示してみる

DataFrameからは、iterrows()で列挙された行を取得できます。

ここでrow[0]がA列のセルの内容、row[1]がB列のセルの内容……となりますので、自由に扱えますね。

後書き

実際のプログラムではもっと複雑な構造のデータを扱うことがほとんどですが、この辺りは慣れたいですね。

次回はプログラムのテストについて、書けたらいいなあと思います。