こんにちは~
Pythonでエクセルやcsvを自動で編集できたら仕事が楽になると思うので、色々プログラムを作成しています。
今回は複数のcsvファイルを結合する方法を学習したので、纏めて記事にしました。
この記事が誰かの役に立ったら幸いです。
概要
2つのやり方を記載したいと思いますが、
まずは処理する概要の説明します。
↓のように3つのcsvファイルの値を結合したいと思います。
中身は3ファイルとも↓のようになっています。
方法①
まずは一つ目の方法です。
↓のようなコードで処理することができました。
import pandas as pd import csv import glob sample_files = glob.glob('./sample_data/*.csv') list = [] for file in sample_files: list.append(pd.read_csv(file)) df = pd.concat(list) df.to_csv('marge_result.csv',index=False)
処理結果は↓のようになっており、列を結合する形式になっています。
ここから色々編集すれば使い勝手がよさそうです。
glob.glob(‘./sample_data/*.csv’)
glob.glob(‘./sample_data/*.csv’)
globモジュールで、引数に指定されたパターンにマッチするファイルパス名を取得することができるため、ここで、sample_dataと名前のついたフォルダ配下の.csvファイルを全て取得します。
list = []
list = []
とリストを定義します。リストだと編集しやすくなるみたいです。
For文
↓のFor文で、listにcsvファイルを追加します。
そして、padasのcontactで全てのcsvを結合してそのファイルを出力しています。
for file in sample_files: list.append(pd.read_csv(file)) df = pd.concat(list) df.to_csv('marge_result.csv',index=False)
方法②
次に2つ目の方法を記載します。
↓のようなコードでも結合処理を行うことができます。
import pandas as pd import os import csv import glob df_dir='./sample_data/' df_file ='*.csv' if __name__ =="__main__": for f in glob.glob(os.path.join(df_dir,df_file)): with open(f) as file: reader = csv.reader(file) valuelist = [row[1] for row in reader] with open('marge_result2.csv', 'a') as g: writer = csv.writer(g, lineterminator='\n') writer.writerow(valuelist)
処理結果は↓のように、指定の列を行毎にまとめて結合しています。
今回は一例としてtest2(2列目)を抜き出して結合してみました。
if __name__ ==”__main__“:
これはいらないかと思いますが、インポートした時に実行したくなければつけておきまししょう(,pyのファイル名と一致させておく必要がりますが)
行の抽出
↓のfor文で、読み込んだcsvファイル全てをrow[1](2列)だけにします。
for f in glob.glob(os.path.join(df_dir,df_file)): with open(f) as file: reader = csv.reader(file) valuelist = [row[1] for row in reader]
結合
↓のforで、marge_result2.csvというファイルを作成し、それに上記で抜き出した列を結合してきます。これで結合しています。
with open('marge_result2.csv', 'a') as g: writer = csv.writer(g, lineterminator='\n') writer.writerow(valuelist)
以上になります。
2種類の結合方法を学んだので記載しました。
如何でしたでしょうか?
役立つ情報を発信できていたら幸いです。
ではまた!
コメント