データ結合のメソッド、パラメータまとめ
pythonのデータ分析のライブラリpandasを使ってみたのですが、テーブルの結合方法が色々あったので忘れないように重要事項をざっくりメモします。
後で使いやすいように、まずは一覧から。
主な連結方法
メソッド名 |
パラメータ |
説明 |
concat |
axis=0(デフォルト) |
縦方向に連結 |
concat |
axis=1 |
横方向に連結 |
merge |
|
共通列名で結合 |
concatの結合方法
パラメータ設定 |
詳細 |
join="outer" (デフォルト) |
全てのラベルを残す |
join="inner" |
両方に共通するラベルのみ残す |
join_axes="ラベル名" |
指定したラベルを残す |
mergeの結合方法
パラメータ設定 |
詳細 |
on="列名" |
指定列をキーとして結合、指定なしなら全ての共通列名がキーになる |
パラメータ設定 |
詳細 |
how="inner" (デフォルト) |
キーを見て、両方のテーブル共通してあるデータのみ残す |
how="left" |
キーを見て、左テーブル(第一引数)のデータは全て残す |
how="right" |
キーを見て、右テーブル(第二引数)のデータは全て残す |
how="outer" |
キーを見て、片方のテーブルにしかないデータも全て残す |
具体例〜concat
わからなくなったときのため、いくつかテーブルとその結合結果をまとめます。
(例1)
import pandas as pd
pd.concat([df1, df2])
パラメータを何も指定しない場合は縦に結合し、列ラベルも全て残ります。
df1 |
A |
B |
C |
0 |
a0 |
b0 |
c0 |
1 |
a1 |
b1 |
c1 |
2 |
a2 |
b2 |
c2 |
result |
A |
B |
C |
D |
0 |
a0 |
b0 |
c0 |
NaN |
1 |
a1 |
b1 |
c1 |
NaN |
2 |
a2 |
b2 |
c2 |
NaN |
0 |
a0 |
NaN |
NaN |
d0 |
1 |
a1 |
NaN |
NaN |
d1 |
(例2)
pd.concat([df1, df2], axis=1, join_axes=[df1.index])
axis=1より横方向の結合です。
join_axesにdf1のindexを指定しているので、df1の行が全て残ります。
df1 |
A |
B |
C |
0 |
a0 |
b0 |
c0 |
1 |
a1 |
b1 |
c1 |
2 |
a2 |
b2 |
c2 |
df2 |
C |
D |
1 |
c1 |
d1 |
2 |
c2 |
d2 |
3 |
c3 |
d3 |
result |
A |
B |
C |
C |
D |
0 |
a0 |
b0 |
c0 |
NaN |
NaN |
1 |
a1 |
b1 |
c1 |
c1 |
d1 |
2 |
a2 |
b2 |
c2 |
c2 |
d2 |
具体例〜merge
(例1)
import pandas as pd
pd.merge(df1, df2)
df1 |
A |
B |
C |
0 |
a0 |
b0 |
c0 |
1 |
a1 |
b1 |
c1 |
2 |
a2 |
b2 |
c2 |
df2 |
B |
C |
D |
1 |
b1 |
c1 |
d1 |
2 |
b2 |
c2 |
d2 |
3 |
b3 |
c3 |
d3 |
result |
A |
B |
C |
D |
0 |
a1 |
b1 |
c1 |
d1 |
1 |
a2 |
b2 |
c2 |
d2 |
デフォルトでは共通の列全て(B、C)がキーです。
行においては2つのテーブルのキーに共通するデータ(b1c1、b2c2)のみ残ります。
また、mergeではindexは0から振り直されます。
(例2)
pd.merge(df1, df2, on="C", how="outer")
df1 |
A |
B |
C |
0 |
a0 |
b0 |
c0 |
1 |
a1 |
b1 |
c1 |
2 |
a2 |
b2 |
c2 |
df2 |
B |
C |
D |
1 |
b1 |
c1 |
d1 |
2 |
b2 |
c2 |
d2 |
3 |
b3 |
c3 |
d3 |
result |
A |
B_x |
C |
B_y |
D |
0 |
a0 |
b0 |
c0 |
NaN |
NaN |
1 |
a1 |
b1 |
c1 |
b1 |
d1 |
2 |
a2 |
b2 |
c2 |
b2 |
d2 |
3 |
NaN |
NaN |
c3 |
b3 |
d3 |
onでCのみ結合のキーに指定したので、Bは結合されずx、yの添え字付きで別々に残ります。
結合方法はouterなので、行は片方のテーブルにしか存在しないもの(c0、c3)も全て残っているのが確認できます。