業務でのデータ処理や分析の場面で役立つPandasとopenpyxlのサンプルコードをまとめました。
ここでは「最低限これだけあれば事足りそう」というものに絞って紹介します。これらのライブラリを活用することで、日々の業務をより効率的にこなしていきましょう。
1.Pandasとは
Pythonは学習コストが低いわりにいろんなことができるため、初心者から専門家まで広く使われるプログラミング言語です。
そのPythonの中でも、データ解析において圧倒的な力を発揮するのが「Pandas」というライブラリです。とにかく便利でユニークな存在です。
Pandasを利用すれば、「DataFrame」(という独自のデータ構造)を駆使して大量のデータでも迅速かつ自由に操作できます。DataFrame上で手軽にごにょごにょデータをいじくり回せます。PandasはPythonの高速な多次元配列計算ライブラリであるNumPyを使って実装されているので、複雑な演算も高速に処理できるのも特徴です。
個人的には、Pandasの本領が発揮されるのは、データに欠損値(NaN値)がある場合や、データのクリーニング作業が必要な場面じゃないかなと思います。平均値や中央値で値を埋めたり、特定の条件でフィルタリングすることも簡単にできてしまいます。
ですが、すべての機能をフルに活用する必要はありません。まずはよく使う作業から慣れていきましょう。
特にExcelで行っていた処理を置き換える際に、Pandasは大いに役立ちますよ。
2.業務でよく使いそうなPandasとopenpyxlサンプル
CSVファイルからの抽出や合計算出
まずはCSVファイルを読み込み、SQLライクな方法で特定のデータを抽出し(合計もとり)、それをExcelファイルに書き込む例です。
サンプルコード
import pandas as pd import openpyxl #csvファイル読み込み df = pd.read_csv('d:\sample.csv', encoding = 'utf-8') # DataFrame側で抽出操作 df2 = df.query('subject=="Science" and sex=="male"') # df_db2.sum(axis=0) で全カラムも可 sum_score = df2['score'].sum(axis=0) # 既存のExcelへ書き出し wb = openpyxl.load_workbook('d:\output.xlsx') sheet = wb['Sheet1'] sheet['A1'] = sum_score wb.save('d:\output.xlsx')
コードの解説
CSVファイルからデータを読み込み条件を指定して抽出、その後に結果をExcelシートに書き込んでいます。以下に1行1行解説します。
import pandas as pd:
pandasというPythonのライブラリを使えるようにします。pdという短縮名で使えるようにしています。
import openpyxl:
openpyxlというライブラリを使えるようにします。このライブラリは、Excelファイルを操作するための機能を提供するためのものです。
df = pd.read_csv(‘d:\sample.csv’, encoding = ‘utf-8’):
pandasを使って、指定されたパスにあるCSVファイル (sample.csv) を読み込み、それをdfという変数に格納します。dfは、データを表形式(DataFrame)で保持しています。encoding=’utf-8’は、ファイルの文字エンコーディングを指定しています。
df2 = df.query(‘subject==”Science” and sex==”male”‘):
dfの中から、subject(科目)が「Science」で、sex(性別)が「male」(男性)である行だけを抽出します。この抽出結果をdf2という変数に格納しています。
sum_score = df2[‘score’].sum(axis=0):
抽出されたデータ (df2) の中で、score(得点)列の合計を計算して、その結果をsum_scoreという変数に保存します。
wb = openpyxl.load_workbook(‘d:\output.xlsx’):
openpyxlを使って、指定されたパスにある既存のExcelファイル (output.xlsx) を開きます。wbという変数にそのファイルの内容を格納します。
sheet = wb[‘Sheet1’]:
開いたExcelファイルの中で、「Sheet1」というシートを指定して、そのシートをsheetという変数に格納します。
sheet[‘A1’] = sum_score:
Excelの「Sheet1」シートのA1セルに、先ほど計算したsum_score(得点の合計)を書き込みます。
wb.save(‘d:\output.xlsx’):
修正したExcelファイル (output.xlsx) を保存します。これで、A1セルに新しいデータが書き込まれた状態でファイルが上書き保存されます。
データベースからの抽出
次にデータベース操作(ここではsqlite)も含んだ例です。
PandasのDataFrameを用いると、データベースからのデータ操作がより簡単に行えます。
DataFrameの機能が超強力なので、本当はわざわざ「SQLで抽出したデータだけをDataFrameに突っ込む」という操作自体必要ありません。ここではあくまで書き方の例として紹介しておきます。(※記述例を紹介するために若干必要のないこともしています)
サンプルコード
import sqlite3
import openpyxl
#csvをDataFrameに読み込む
df = pd.read_csv('d:\sample.csv', encoding = 'utf-8')
# db接続してtableにDataFrameの内容を突っ込む
dbname = 'sample.db'
conn = sqlite3.connect(dbname)
df.to_sql('sample_table',conn,if_exists='replace')
#tableから特定条件のものだけDataFrameへ読み込む
df_db = pd.read_sql('select * from sample_table where flg=1', conn)
conn.close()
# DataFrame側でごにょごにょする
df_db2 = df_db.query('subject=="Science" and sex=="male"')
sum_score = df_db2['score'].sum(axis=0)
# 既存のExcelへ書き出し
wb = openpyxl.load_workbook('d:\output.xlsx')
sheet = wb['Sheet1']
sheet['E1'] = sum_score
wb.save('d:\output.xlsx')
コードの解説
import sqlite3:
sqlite3というPythonの標準ライブラリをインポートします。これを使うことで、SQLiteという軽量なデータベースを操作できます。
conn = sqlite3.connect(dbname):
sqlite3を使って、sample.dbという名前のデータベースに接続します。この接続情報をconnという変数に保存します。もしこのデータベースファイルが存在しなければ、新しく作成されます。
df.to_sql(‘sample_table’, conn, if_exists=’replace’):
DataFrame (df) の内容をSQLiteデータベース内のsample_tableというテーブルに保存します。if_exists=’replace’は、既に同じ名前のテーブルが存在する場合、そのテーブルを置き換えることを意味します。
df_db = pd.read_sql(‘select * from sample_table where flg=1’, conn):
SQLクエリを使って、sample_tableテーブルからflg列が1である行をすべて選択し、その結果をDataFrame (df_db) に保存します。pd.read_sqlを使うことで、SQLの結果を直接DataFrameに読み込むことができます。
conn.close():
データベース接続を閉じます。これで、データベースに対する操作が終了します。
まとめ
Pandasとopenpyxlを組み合わせることで、日常のデータ処理や分析作業を大幅に効率化することができます。これらを用いることで、より迅速に、そして正確に業務を遂行することが可能になります。まだ触れたことがない機能も多々ありますが、まずは基本を押さえ、徐々にスキルを広げていくことで、業務の幅を広げていきましょう。
Pythonおすすめの勉強方法
Pythonを最も効率的に学べる方法についてはこちらにまとめています。
本ブログでは業務に役立つ技術情報をこれからも発信していきますので、困った時にはぜひ参考にしてみて下さいね。