Pandas DataFrame DataFrame.merge() 関数
-
pandas.DataFrame.merge()
の構文 -
コード例:
DataFrame.merge()
2つのDataFrames
をマージする関数 -
コード例:
merge
メソッドにhow
パラメータを設定して、さまざまな手法を使用してデータフレームをマージする -
コード例:Pandas の
DataFrame.merge()
関数を用いて特定の列のみをマージする -
コード例:DataFrame をマージするための結合キーとしてインデックスを使用する
DataFrame.merge()
関数
Python Pandas DataFrame.merge()
関数は DataFrame
または名前付き系列オブジェクトをマージします。
pandas.DataFrame.merge()
の構文
DataFrame.merge(
right,
how="inner",
on=None,
left_on=None,
right_on=None,
left_index=False,
right_index=False,
sort=False,
suffixes="_x",
"_y",
copy=True,
indicator=False,
validate=None,
)
パラメータ
right |
DataFrame または名前のついた Series . オブジェクトとマージします。 |
how |
left 、right 、inner 、outer のいずれかです。マージ操作の実行方法 |
on |
ラベルまたはリスト。マージするカラム名またはインデックス名 |
left_on |
ラベルまたはリスト。左側の DataFrame にマージするカラム名またはインデックス名 |
right_on |
ラベルまたはリスト。右側の DataFrame にマージするカラム名またはインデックス名 |
left_index |
論理値。左側の DataFrame のインデックスを結合キーとして使用します(left_index=True ) |
right_index |
論理値。右側の DataFrame のインデックスを結合キー(right_index=True )として使用します。 |
sort |
論理値。結合キーをアルファベット順にソートして出力する(sort=True ) |
suffixes |
左側と右側の重複する列名にそれぞれ適用される接尾辞 |
copy |
論理値。コピーを避けるには copy=False を指定します。 |
indicator |
出力 DataFrame に _merge という名前のカラムを追加し、各行の情報を出力します(indicator=True ) また、出力 DataFrame (indicator=string ) に string という名前のカラムを追加します。 |
validate |
パラメータを使用して、マージが指定された型であるかどうかを調べます。 |
戻り値
与えられたオブジェクトをマージした DataFrame
を返します。
コード例:DataFrame.merge()
2つの DataFrames
をマージする関数
import pandas as pd
df1 = pd.DataFrame(
{"Name": ["Suraj", "Zeppy", "Alish", "Sarah"], "Working Hours": [1, 2, 3, 5]}
)
df2 = pd.DataFrame({"Name": ["Suraj", "Zack", "Alish", "Raphel"], "Pay": [5, 6, 7, 8]})
print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)
merged_df = df1.merge(df2)
print("Merged DataFrame:")
print(merged_df)
出力:
1st DataFrame:
Name Working Hours
0 Suraj 1
1 Zeppy 2
2 Alish 3
3 Sarah 5
2nd DataFrame:
Name Pay
0 Suraj 5
1 Zack 6
2 Alish 7
3 Raphel 8
Merged DataFrame:
Name Working Hours Pay
0 Suraj 1 5
1 Alish 3 7
これは、SQL
の inner-join
メソッドを用いて df1
と df2
を単一の DataFrame
にマージします。
inner-join
メソッドでは、両方の DataFrames
に共通のカラムが少なくとも 1つあることを確認しなければなりません。
ここで、merge()
関数は共通の列の値が同じである行を両方の DataFrames
に結合します。
コード例:merge
メソッドに how
パラメータを設定して、さまざまな手法を使用してデータフレームをマージする
import pandas as pd
df1 = pd.DataFrame(
{"Name": ["Suraj", "Zeppy", "Alish", "Sarah"], "Working Hours": [1, 2, 3, 5]}
)
df2 = pd.DataFrame({"Name": ["Suraj", "Zack", "Alish", "Raphel"], "Pay": [5, 6, 7, 8]})
print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)
merged_df = df1.merge(df2, how="right")
print("Merged DataFrame:")
print(merged_df)
出力:
1st DataFrame:
Name Working Hours
0 Suraj 1
1 Zeppy 2
2 Alish 3
3 Sarah 5
2nd DataFrame:
Name Pay
0 Suraj 5
1 Zack 6
2 Alish 7
3 Raphel 8
Merged DataFrame:
Name Working Hours Pay
0 Suraj 1.0 5
1 Alish 3.0 7
2 Zack NaN 6
3 Raphel NaN 8
これは、SQL
の right-join
テクニックを用いて df1
と df2
を単一の DataFrame
にマージします。
ここで、merge()
関数は右の DataFrame
からすべての行を返します。しかし、左の DataFrame
に存在する行のみが NaN
値を取得します。
同様に、how
パラメータの left
と outer
の値を使用することもできます。
コード例:Pandas の DataFrame.merge()
関数を用いて特定の列のみをマージする
import pandas as pd
df1 = pd.DataFrame(
{
"Name": ["Suraj", "Zeppy", "Alish", "Sarah"],
"Working Hours": [1, 2, 3, 5],
"Position": ["Salesman", "CEO", "Manager", "Sales Head"],
}
)
df2 = pd.DataFrame(
{
"Name": ["Suraj", "Zack", "Alish", "Raphel"],
"Pay": [5, 6, 7, 8],
"Position": ["Salesman", "CEO", "Manager", "Sales Head"],
}
)
print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)
merged_df = df1.merge(df2, on="Name")
print("Merged DataFrame:")
print(merged_df)
出力:
1st DataFrame:
Name Working Hours Position
0 Suraj 1 Salesman
1 Zeppy 2 CEO
2 Alish 3 Manager
3 Sarah 5 Sales Head
2nd DataFrame:
Name Pay Position
0 Suraj 5 Salesman
1 Zack 6 CEO
2 Alish 7 Manager
3 Raphel 8 Sales Head
Merged DataFrame:
Name Working Hours Position_x Pay Position_y
0 Suraj 1 Salesman 5 Salesman
1 Alish 3 Manager 7 Manager
これは df1
と df2
の Name
カラムのみを結合します。デフォルトの結合方法は inner-join
なので、両方の DataFrame
に共通の行のみが結合されます。position
カラムは両方の DataFrames
に共通なので、Position_x
と Position_y
という 2つの位置のカラムを持つことになります。
デフォルトでは、_x
と _y
のサフィックスが重複するカラムの名前に付加されます。サフィックスは suffixes
パラメータで指定できます。
df1 = pd.DataFrame(
{
"Name": ["Suraj", "Zeppy", "Alish", "Sarah"],
"Working Hours": [1, 2, 3, 5],
"Position": ["Salesman", "CEO", "Manager", "Sales Head"],
}
)
df2 = pd.DataFrame(
{
"Name": ["Suraj", "Zack", "Alish", "Raphel"],
"Pay": [5, 6, 7, 8],
"Position": ["Salesman", "CEO", "Manager", "Sales Head"],
}
)
print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)
merged_df = df1.merge(df2, on="Name", suffixes=("_left", "_right"))
print("Merged DataFrame:")
print(merged_df)
出力:
1st DataFrame:
Name Working Hours Position
0 Suraj 1 Salesman
1 Zeppy 2 CEO
2 Alish 3 Manager
3 Sarah 5 Sales Head
2nd DataFrame:
Name Pay Position
0 Suraj 5 Salesman
1 Zack 6 CEO
2 Alish 7 Manager
3 Raphel 8 Sales Head
Merged DataFrame:
Name Working Hours Position_left Pay Position_right
0 Suraj 1 Salesman 5 Salesman
1 Alish 3 Manager 7 Manager
コード例:DataFrame をマージするための結合キーとしてインデックスを使用する DataFrame.merge()
関数
import pandas as pd
df1 = pd.DataFrame(
{
"Name": ["Suraj", "Zeppy", "Alish", "Sarah"],
"Working Hours": [1, 2, 3, 5],
"Position": ["Salesman", "CEO", "Manager", "Sales Head"],
}
)
df2 = pd.DataFrame(
{
"Name": ["Suraj", "Zack", "Alish", "Raphel"],
"Pay": [5, 6, 7, 8],
"Position": ["Salesman", "CEO", "Manager", "Sales Head"],
}
)
print("1st DataFrame:")
print(df1)
print("2nd DataFrame:")
print(df2)
merged_df = df1.merge(
df2, left_index=True, right_index=True, suffixes=("_left", "_right")
)
print("Merged DataFrame:")
print(merged_df)
出力:
1st DataFrame:
Name Working Hours Position
0 Suraj 1 Salesman
1 Zeppy 2 CEO
2 Alish 3 Manager
3 Sarah 5 Sales Head
2nd DataFrame:
Name Pay Position
0 Suraj 5 Salesman
1 Zack 6 CEO
2 Alish 7 Manager
3 Raphel 8 Sales Head
Merged DataFrame:
Name_left Working Hours Position_left Name_right Pay Position_right
0 Suraj 1 Salesman Suraj 5 Salesman
1 Zeppy 2 CEO Zack 6 CEO
2 Alish 3 Manager Alish 7 Manager
3 Sarah 5 Sales Head Raphel 8 Sales Head
2つの DataFrames
の対応する行を、カラムの類似性を考慮せずにマージします。両方の DataFrame
に同じ列名があった場合、結合後は列名に接尾辞を付けて別のカラムにします。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn