pandasを使ったCSVデータの結合(過去記事)

目次

今回やりたいこと

2つのCSVファイルを連結し、条件で抽出し、その結果をExcelファイルに出力します。

検証データ

ユーザーデータ(users.csv)

idnamedept
1001alice01
1002bob01
1003Carol02
1004dave02
1005eve02
1006frank03

部署データ(depts.csv)

dept_iddept_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文でカウンタつけて集計

とか

まだまだできることがたくさんありそう。

目次