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 …… pythonExcelファイルを読み込むためのライブラリです。
  • 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

(こちらも近日中に更新しないと……)

 

よろしくお願いします!