[Python] 複数のcsvファイルを結合する方法

Python
スポンサーリンク

こんにちは~

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種類の結合方法を学んだので記載しました。
如何でしたでしょうか?
役立つ情報を発信できていたら幸いです。

ではまた!

コメント

タイトルとURLをコピーしました