91 views
【1】やりたいこと
同じデータフォーマットの CSVファイルが複数ある。
すなわち、列ヘッダがまったく同じ CSVファイルが複数ある。
これらの CSVファイルを連結し、一つの配列に束ね、一つの CSVファイルに出力したい。
ただし、列ヘッダは先頭行のみに出力したい。
【2】やってみる
下記のコードは、ChatGPT大先生に出力していただいたコードに、少しだけ手を加えたコードです。
いやぁ~ 便利だなぁ。
import pandas as pd import glob import os # CSVファイルのパスを指定します。'*'はワイルドカードとして、 # 特定のパターンにマッチするファイル名をすべて取得します。 file_paths = glob.glob('in/*.csv') # 結果を格納するための空のデータフレームを用意します。 df_concatenated = pd.DataFrame() # 各ファイルをループ処理します。 for i, file in enumerate(file_paths): # 最初のファイルの場合、ヘッダを含めて読み込みます。 if i == 0: df = pd.read_csv(file) else: # 2個目以降のファイルの場合、ヘッダを除いて読み込みます。 df = pd.read_csv(file, header=None, skiprows=1) # 2個目以降のファイルのカラム名を最初のファイルのカラム名に合わせます。 df.columns = df_concatenated.columns # 読み込んだデータフレームを結果に追加します。 df_concatenated = pd.concat([df_concatenated, df], ignore_index=True) # 出力フォルダの存在を検査し、存在しなければ作成します。 out_dir = './out' if not os.path.exists(out_dir): os.makedirs(out_dir) # 結果をCSVファイルに保存します。インデックスは保存しないように指定します。 out_fpath = os.path.join(out_dir, 'out.csv') df_concatenated.to_csv(out_fpath, index=False, encoding='cp932')