注目キーワード

【Python】pandas で2つのデータフレームを結合処理 する (merge)

Pythonのライブラリであるpandasを使うといろんなCSVファイルを読み込むことができます。こち らでは2つのCSVファイルを結合し、大きなデータとしてデータ解析を行うための処理を説明しま す。

データの準備

read_csv の記事で利用していたサンプルのデータを続けて利用しています。

元のデータは、厚生労働省のページから新型コロナウイルスに関するオープンデータを用いています。 ページより「PCR検査の実施人数」から「pcr_case_daily.csv」をダウンロードしました。こちらのファイルには検査人数が実施された機関ごとの件数が2020年2月から2022年9月まで記録されています。

データ処理の例題に使うために、2020年2月のデータを取り出した上で、「国立感染症研究所」と 「検疫所、地方衛生研究所・保健所、民間検査会社(主に行政検査)、大学等」の列とで2つの データに分割して保存しました(それぞれpcr_case_daily_202002_1.csv pcr_case_daily_202002_2.csv という名前で保存しました)。

以下の図は元データの列名です。このうち上に説明した一部だけ利用しています。

サンプル元データの属性です。

merge を用いて2つのデータフレームを結合する

これまでも利用しているデータをpandasのread_csvで読み込みした後に、結合して1つのDataFrameとして扱う処理を説明します。merge() は主に「2つのデータフレームの結合」を「横方向」で結合する場合に利用します。例で見ていきましょう。

2つのデータフレームを merge で結合するサンプルコード

サンプルコードを示します。merge() は2つの方法で呼び出すことができます。

1つ目の方法は、pandas モジュールから merge 関数を呼び出しています。

2つ目の方法は、データフレーム(ここでは df1 )から呼び出しています。どちらも同じくデータフレームが横に結合した新しいデータフレームを計算して返します。

サンプルコードの実行結果

下の図は2つのデータフレームを横方向に2種類の関数呼び出し方法で結合した結果です。確認のために、df12/df12_をprintで出力してみます。同じようにデータフレームが結合できることが分かります。どちらも同じ結果が得られました。

2種類の方法でデータフレームを横方向に結合した例です。

merge の結合方法の他の例を確認する

2つの表を結合する merge では、データフレームのどのキーを結合するのかを指定することができます。先程の例では、データフレームについたインデックス(0、1、…)でデータを結合していました。

結合方法をよく理解するために、以下の架空の病院データを利用して結合を行ってみます。

架空の病院データを用いるサンプルコード

サンプルコードです。

スポンサーリンク

こちらのサンプルコードでは以下のように処理を行っています。

はじめに病院名と人数が記録されたデータフレームdf1を作成しています。

つぎに病院名に対して郵便番号・住所が書かれたデータフレームdf2を作成しています。

最後に merge を利用して、df1の中に存在する病院Aと病院Cについて、df2から情報を抽出してきてマージし、新しいデータフレームを作成しています。もしExcelのVLOOKUPなどの関数を使ったことがあれば、想像しやすい動作かもしれません。

実行結果

結果は次のようになります。

病院データを結合した例です。

いろいろな表データを読み込んで結合操作をすることで、複雑のデータを読み込んだり、読み込んだデータフレームを利用して柔軟なデータ処理や集計が可能になります。いろんな方法でデータを読み込んで、使ってみてください。