0
0

More than 1 year has passed since last update.

【Python】Pandasを利用して、同じ数値から始まる二つのCSVファイルの中身を一瞬で結合する方法

Posted at

概要

同じ数値から始まる二つのCSVファイルの中身を、横方向(列方向)に結合するコードを実装しました。

前提

hogeディレクトリにあるXXX_output.csvと、fooディレクトリにあるXXX_2_output.csvを結合して、一つのCSVファイルを作成します。XXXには同じ数値が入ります。

例:

1234567890_output.csv
1234567890_2_output.csv
↓
結合
↓
1234567890_data.csv

結合して作成されたCSVファイルは、ディレクトリcombinedXXX_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()関数によって、datadata2の列が横に連結され、新しいデータフレーム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とするか省略することによって、含めることができます。
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0