#はじめに
初めての投稿です。python初心者です。
設備などから吐き出された共通フォーマットのcsvファイルを複数まとめて1つのファイルにしたいと思い色々調べて作ったコードを紹介します。
2020/04/06追記
ヘッダーが一行かつ、きれいにすべてのデータがあるときに有効。
データが無い行があるとエラーになる可能性あるので注意。
#環境
- python3.x
- jupyter Notebook
- csv
- mac
#コード
実行場所にあるtestフォルダ内にフォーマットが同じcsvが大量にある想定。
import pandas as pd
import glob
# パスで指定したファイルの一覧をリスト形式で取得. (ここでは一階層下のtestファイル以下)
csv_files = glob.glob('test/*.csv')
#読み込むファイルのリストを表示
for a in csv_files:
print(a)
#csvファイルの中身を追加していくリストを用意
data_list = []
#読み込むファイルのリストを走査
for file in csv_files:
data_list.append(pd.read_csv(file))
#リストを全て行方向に結合
#axis=0:行方向に結合, sort
df = pd.concat(data_list, axis=0, sort=True)
df.to_csv("test/total1.csv",index=False)
#やっていること
- globで指定したファイルのリストを取得
- pd.read_csv()でファイルを読み込みこむ(header=0でヘッダーありとして読み込まれる)
- forループで全てのlistの中身を追加
- pd.concatでリスト内全てを結合させる
- 最後にdf.to_csv()でcsvファイルに書き出す
#感想
ヘッダーの処理を気にしていましたが、pandasを利用すれば気にせずに同じカラムを持つもの同士データだけで結合してくれるので便利だし、pandasの動きを理解することができました。
#参考
- https://life-freedom888.com/pandas-hukusuufile-concat/#toc1
- https://deepage.net/features/pandas-concat.html
#追記(2020/04/06)
- これだとカラム数が一見違うようなファイルではうまく読み込めなかった。
- 行ごとに読み込む方法で解決した。(別記事)