目次
今回やりたいこと
2つのCSVファイルを連結し、条件で抽出し、その結果をExcelファイルに出力します。
検証データ
ユーザーデータ(users.csv)
| id | name | dept |
|---|---|---|
| 1001 | alice | 01 |
| 1002 | bob | 01 |
| 1003 | Carol | 02 |
| 1004 | dave | 02 |
| 1005 | eve | 02 |
| 1006 | frank | 03 |
部署データ(depts.csv)
| dept_id | dept_name |
|---|---|
| 01 | 商品開発 |
| 02 | システム開発 |
| 03 | 商品販売 |
プラグラムの流れ
1.csvを読み込む
- csvの読み込みにはpandasというライブラリを利用する
- pandasではDataFrame(データフレーム)というオブジェクトを扱う
import pandas as pd
# ユーザーデータの読み込み<br>users = pd.read_csv('data/users.csv', na_filter=False)
# 部署データの読み込み<br>depts = pd.read_csv('data/depts.csv', na_filter=False)2.データを結合
- left_on と right_on で結合に使うフィールドを指定できる
- how を指定することで結像方法を指定できる(デフォルトでは’inner’)
# usersとdeptをマージ
merge_data = pd.merge(users, depts, left_on='dept', right_on='dept_id')3.条件で絞り込む
# 開発関係の部門を抽出
developers = marge_data.query('service.str.contains("開発")')4.Excelに出力
# Excelに出力
developers.to_excel('D:/developers.xlsx', index=None)最終的に
import pandas as pd
# ユーザーデータの読み込み
users = pd.read_csv('data/users.csv', encoding="shift-jis")
# 部署データの読み込み
depts = pd.read_csv('data/depts.csv', encoding="shift-jis")
# usersとdeptをマージ
merge_data = pd.merge(users, depts, left_on='dept', right_on='dept_id')
# 開発関係の部門を抽出
developers = merge_data.query('service.str.contains("開発")')
# Excelに出力
developers.to_excel('D:/developers.xlsx', index=None)Excel出力結果

まとめ
わずか6行でcsvファイルの結合&エクスポートができました。
単純なことしかしていませんが、これだけでも可能性に溢れていると思います。
例えば
- 標準入力を利用して様々なファイルに対応する
- for文を使ってグループごとにそれぞれExcelを出力する
- for文でカウンタつけて集計
とか
まだまだできることがたくさんありそう。
