概要
同じ数値から始まる二つのCSVファイルの中身を、横方向(列方向)に結合するコードを実装しました。
前提
hoge
ディレクトリにあるXXX_output.csv
と、foo
ディレクトリにあるXXX_2_output.csv
を結合して、一つのCSVファイルを作成します。XXX
には同じ数値が入ります。
例:
1234567890_output.csv
1234567890_2_output.csv
↓
結合
↓
1234567890_data.csv
結合して作成されたCSVファイルは、ディレクトリcombined
にXXX_data.csv
の形で保存するものとします。
サンプルコード解説
import os
import pandas as pd
hoge_dir = 'hoge'
foo_dir = 'foo'
combined_dir = 'combined'
# 出力先ディレクトリを作成
os.makedirs(combined_dir, exist_ok=True)
# hogeディレクトリのファイルを処理
for file in os.listdir(hoge_dir):
if file.endswith('_output.csv'):
file_name = file.split('_output.csv')[0]
output_file_name = file_name + '_data.csv'
output_file_path = os.path.join(combined_dir, output_file_name)
file_path = os.path.join(hoge_dir, file)
file_path_2 = os.path.join(foo_dir, file_name + '_2_output.csv')
# ファイルを結合して新しいCSVファイルに保存
data = pd.read_csv(file_path)
data2 = pd.read_csv(file_path_2)
combined_data = pd.concat([data, data2], axis=1)
combined_data.to_csv(output_file_path, index=False)
print(f'{output_file_name} の作成が完了しました。')
補足
-
os.makedirs()
関数を使って、combined_dir
で指定されたディレクトリを作成していますが、exist_ok=True
を指定することで、既にディレクトリが存在している場合でもエラーを発生させずに処理を続行させることができます。- 上書きさせたくない時は外してください。
FileExistsError: [Errno 17] File exists:
エラーが表示されます。
- 上書きさせたくない時は外してください。
-
os.listdir(hoge_dir)
は、hoge_dir
で指定されたディレクトリ内のすべてのファイルとディレクトリの名前をリストとして取得。 -
file_name = file.split('_output.csv')[0]
により、1234567890_output.csv
というファイル名を_output.csv
を区切り文字として分割し、分割後の最初の要素(インデックス0
の要素)を変数に代入します。file.split
では、以下のように分割されます。['1234567890', '']
-
pd.concat([data, data2], axis=1)
は、Pandasライブラリのconcat()
関数を使って、2つのデータフレームを横方向(列方向)に結合する操作。第1引数には結合したいデータフレームをリストとして渡し、axis
引数で結合方向を指定します。pd.concat()
関数によって、data
とdata2
の列が横に連結され、新しいデータフレームcombined_data
が作成されます。- 二つのCSVファイルで行数は一致している必要があります。一つのCSVで3行あっても、もう一つのCSVで1行しかない場合、1行までしか結合されません。
- 縦方向(行方向)に結合する場合は、
axis=0
を指定します。デフォルトではaxis=0
です。 - ちなみに
sort=True
というように、結合したデータフレームのインデックス(行番号)が昇順にソートするオプションがありますが、デフォルトではTrue
が設定されており、Pandasバージョン0.23.0以降では非推奨となっているようです。
-
combined_data.to_csv(output_file_path, index=False)
で、combined_data
をCSVファイルとしてoutput_file_path
に保存します。-
to_csv
は、DataFrameのデータをCSV形式のファイルに保存するPandasのメソッド。 -
index=False
は、行番号をCSVに保存しないようにするためのオプション。行番号を含める場合は、index=True
とするか省略することによって、含めることができます。
-