こんにちは。カルークです。
今回は2つのデータフレームのカラム名の差分を調べる方法についてまとめます。他にも、共通集合(AND)や和集合(OR)を調べる方法についても記述します。
方法は色々とあるかと思いますが、今回は以下のような流れで行きたいと思います。
- データフレームに対してkeys()を適用しカラム一覧を取得
- それにset()を適用しpythonのset型にして、集合演算で求める
実行環境
今回の実行環境は以下になります。
- OS: Windows 10 Pro (64-bit)
- Anaconda: conda version 4.9.2
- Python: 3.8
- 実行環境: jupyter notebook
- pandas: 1.2.3
用いるデータ
以下のような2種類のデータフレームを定義します。
import pandas as pd
df_a = pd.DataFrame({
"name": ["suzuki", "tanaka", "sato"],
"address": ["Tokyo", "Ibaraki", "Kanagawa"],
"hobby": ["soccor", "tennis", "soccor"]
})
df_b = pd.DataFrame({
"name": ["suzuki", "tanaka", "sato"],
"favorite_food": ["Strawberry", "Banana", "Poteto"]
})
それぞれ、こんな感じのデータです。
カラム名をset集合にする方法
以下のように、データフレームに対してkeys()でカラム一覧を取得し、それをsetで括るとset集合になります。
set(df_a.keys())
# 出力
{'address', 'hobby', 'name'}
set(df_b.keys())
# 出力
{'favorite_food', 'name'}
以上のようにして、データフレームのカラム名をset集合として表す事ができます。
ちなみに、データフレームのcolumnsを用いてもカラム一覧を取得できるので、同じ事が実現できます。
set(df_a.columns)
# 出力
{'address', 'hobby', 'name'}
set(df_b.columns)
# 出力
{'favorite_food', 'name'}
2つのデータフレームのカラム名の差分を調べる
まずはカラム名の差分です。setの引き算を計算することで差分を求めます。
df_aにはあって、df_bにないカラム
set(df_a.keys()) - set(df_b.keys())
# 出力
{'address', 'hobby'}
df_bにはあって、df_aにないカラム
set(df_b.keys()) - set(df_a.keys())
# 出力
{'favorite_food'}
2つのデータフレームのカラム名の和集合(OR)を調べる
同じ要領で、和集合も求めることができます。
set(df_a.keys()) | set(df_b.keys())
# 出力
{'address', 'favorite_food', 'hobby', 'name'}
2つのデータフレームのカラム名の共通集合(AND)を調べる
同じ要領で、共通集合も求めることができます。
set(df_a.keys()) & set(df_b.keys())
# 出力
{'name'}
まとめ
ここでは、2つのデータフレームのカラム名の差分を調べる方法についてまとめました。他にも、カラム間の共通集合(AND)や和集合(OR)を調べる方法についても記載しました。
今回は2つのデータフレームのみを用いましたが、3つ、4つ、…とデータフレームが増えても同じように計算することが出来ます。