はじめに
pandasは、Pythonのデータ解析ライブラリの一つであり、数表形式のデータを扱うための高速で柔軟なツールです。pandasを使うことで、データの結合や加工、グループ化、集計、可視化などの処理が容易になります。
本記事では、pandasを使った同じ列名を持つデータの結合方法について解説します。
pandasの基本的な使い方
pandasを使用するには、まずpandasライブラリをインストールする必要があります。インストール方法は、以下のコマンドを実行するだけです。
!pip install pandas
pandasをインストールしたら、以下のようにpandasをインポートして使用します。
import pandas as pd
pandasでは、2つの主要なデータ構造を扱います。
- シリーズ(Series):1次元の配列
-
- データフレーム(DataFrame):2次元のテーブル形式のデータ
データフレームは、行と列からなる2次元のテーブルで、列ごとに異なるデータ型を持つことができます。pandasでは、CSV、Excel、SQLなどの様々な形式のデータを読み込んでデータフレームとして扱うことができます。
データフレームの結合方法の概要
データフレームの結合には、以下のような方法があります。
- 行方向に結合する(concatenate):pandas.concat()
-
- 列方向に結合する(merge):pandas.merge()
行方向の結合は、単純にデータフレームを縦に結合するだけであり、列の情報は変わりません。一方、列方向の結合は、共通の列をキーにして、2つのデータフレームを横に結合します。
ここでは、列方向の結合に焦点を当てて解説します。
同じ列名を持つデータフレームの結合方法
データフレームを結合する際に、同じ列名を持つデータフレームを結合すると、列名が重複してしまいます。このような場合、pandasでは、列名に接尾辞を付加することで、重複を回避することができます。
たとえば、以下のような2つのデータフレームdf1とdf2を考えます。それぞれに”Name”、”Age”、”Sex”という列名があります。
import pandas as pd data1 = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'Sex': ['F', 'M', 'M']} data2 = {'Name': ['Alice', 'Dave', 'Eve', 'Frank'], 'Age': [25, 40, 45, 50], 'Sex': ['F', 'M', 'F', 'M']}
df1 = pd.DataFrame(data1) df2 = pd.DataFrame(data2)
この場合、列方向に結合するためには、pandas.merge()関数を使用します。pandas.merge()関数では、結合する2つのデータフレームと、結合するキーとなる列名を指定します。デフォルトでは、両方のデータフレームに共通する列をキーとして使用します。
merged_df = pd.merge(df1, df2, on='Name') print(merged_df)
上記のコードを実行すると、以下のような結果が得られます。
Name Age_x Sex_x Age_y Sex_y 0 Alice 25 F 25 F
結果を見ると、同じ列名”Name”、”Age”、”Sex”が重複していることがわかります。この場合、”_x”、”_y”のような接尾辞が自動的に付加されています。
列名が重複した場合の処理方法
接尾辞を付加する際のデフォルトの接尾辞は、”_x”、”_y”ですが、pandas.merge()関数の引数suffixesを使用することで、接尾辞を指定することができます。
merged_df = pd.merge(df1, df2, on='Name', suffixes=('_left', '_right')) print(merged_df)
上記のコードを実行すると、以下のような結果が得られます。
Name Age_left Sex_left Age_right Sex_right 0 Alice 25 F 25 F
ここでは、”_left”と”_right”という接尾辞を指定しています。
また、同じ列名を持つデータフレームを結合する場合、列名に重複がある場合には、結合後のデータフレームから不要な列を削除する必要があります。削除する方法には、以下のような方法があります。
- 不要な列を削除する(drop):DataFrame.drop()
-
- 必要な列だけを選択する(reindex):DataFrame.reindex()
たとえば、上記の結合後のデータフレームから、”Age_left”と”Sex_right”の2つの列を削除する場合、以下のようにDataFrame.drop()関数を使用します。
merged_df = merged_df.drop(['Age_left', 'Sex_right'], axis=1) print(merged_df)
上記のコードを実行すると、以下のような結果が得られます。
Name Sex_left Age_right 0 Alice F 25
列名に重複がある場合には、結合後に不要な列を削除することで、データを整理することができます。
実践例:具体的なデータを使った同じ列名の結合手順
最後に、具体的なデータを使って、同じ列名を持つデータの結合手順を解説します。以下の例では、2つのcsvファイル”sales2019.csv”、”sales2020.csv”を読み込んで、年度ごとの売上データを結合します。
まず、3つのcsvファイルを読み込みます。
df2019 = pd.read_csv('sales2019.csv') df2020 = pd.read_csv('sales2020.csv')
次に、3つのデータフレームを結合します。結合するキーは、”Product”と”Country”です。
merged_df = pd.merge(df2019, df2020, on=['Product', 'Country'], suffixes=('_2019', '_2020'))
上記のコードを実行すると、以下のような結果が得られます。
Product Country Sales_2019 Sales_2020 0 Product A US 100 200 1 Product A Canada 150 250 2 Product B US 200 300 3 Product B Canada 250 350
上記の結果を見ると、3つのcsvファイルから取得した年度ごとの売上データが結合され、1つのデータフレームにまとめられていることがわかります。
まとめ
本記事では、pandasを使って、同じ列名を持つデータを結合する方法について解説しました。具体的には、pandas.merge()関数を使用することで、2つ以上のデータフレームをキーによって結合することができます。また、同じ列名が重複する場合には、接尾辞を指定して列名を区別し、結合後に不要な列を削除することができます。
pandasを使うことで、データの結合や加工、グループ化、集計、可視化などの処理が容易になります。データ解析においては、pandasは欠かせないツールの一つであるため、ぜひ使い方を覚えておきましょう。