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列のセルの内容……となりますので、自由に扱えますね。
後書き
実際のプログラムではもっと複雑な構造のデータを扱うことがほとんどですが、この辺りは慣れたいですね。
次回はプログラムのテストについて、書けたらいいなあと思います。
pythonはじめました
はじめに
Excelのシートを使ってちょこちょことデータを出力するアプリケーションが必要になり、そこではpythonを使うことになりました。
pythonの文法は興味レベルで少しだけ知ってますが、実務で使えるかな……大丈夫でしょうかと思いつつも早速やってみました。
インストール
さっそくpython3をインストールし、pandas等必要なライブラリをインストールしました。
- python …… 御存知人気プログラム言語のインタープリタ。今回は3.64を使用しました。
- numpy …… pythonで数値計算を行うためのライブラリです。
- xlrd …… pythonでExcelファイルを読み込むためのライブラリです。
- pandas …… pythonでもっと便利にExcelファイルを扱うライブラリです。上記2つのライブラリが必要です。
ちなみに私の環境では、前回Visual Studioをインストールしたときに
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64
にインストールされていました……ここを使っていいのかな? 一応インストーラーを実行して$PATHを追加しようとすると、ここに設定されます。本当にいいのだろうか。
未検証ですが、pipで他のライブラリのインストーラーを実行するときに、コマンドプロンプトに管理者権限を与えないとエラーが起こるような気がします。
この辺は機会があるときに整理せねば。
実行してみる
さっさく実験プログラムを書いてみました。(Converter.py)
# Converter.py
import pandas as pd
print("Excel Converter ver0.0.0.1")
filename = "C:\work\in\実験.xlsx"
# ファイルのロード
file = pd.ExcelFile(filename, encoding='utf8')
df_list = []
# シートを読み、シートの内容をデータフレームとして取得し、リストに追加する
for sheet in file.sheet_names:
df_list.append(file.parse(sheet))
# とりあえずprintで画面に表示
print(df_list)
コマンドプロンプトで以下を入力
python Converter.py
読めてる!
ほんの数行のコードですが確かに読めてる!
python君すごい! 出来る子!
と感動しました。まあ実際はライブラリに読み込ませてDataFrameを作成し、printにそのリストを丸ごと突っ込んで表示してるだけなんですが、それでも意図したように書きやすいと思いました。人気なのも納得です。
実際に各行ごとに処理を行わせたい場合など、for~in文でDataFrameのiterrows回したりして手軽に行えるようです。それはまた次回に触れます。
ここまでお読みいただきありがとうございました。
ブログ開設
はじめまして、プログラマーのchirorinです。
ブログを開設しました!
記事はまだ無いですが……
こちらは技術系ブログにする予定です。
ゲーム開発などなど
試作ゲームもありますので触って頂けると嬉しいです。
https://unityroom.com/games/minibakery
(こちらも近日中に更新しないと……)
よろしくお願いします!