PandasはPythonの
データ解析ライブラリであり
データの結合や操作に
非常に便利です
特に、異なるデータソースから
データを結合する
必要がある場合には、
Pandasのデータフレームを
使用することが
一般的です。この記事では
Pandasを使用してデータフレームを
結合する方法を解説します。
[PR]※本サイトには、プロモーションが含まれています
今回紹介する結合
今回紹介する結合を纏めました。
結合種 | コード | コードの説明 |
内部結合 | pd.merge(df1,df2, on =’共通列’) | データフレーム df1 と df2 の間で共通キーを使用して、共通するデータのみ結合、結果をデータフレーム df3 に格納しています。 |
全結合 | pd.merge(df1,df2, how =’outer’) | データフレーム df1 と df2 の両方に存在するカラムを利用して結合しています。結合する値が存在しない場合、そのセルには NaN(欠損値)が入ります。 |
左外部結合 | pd.merge(df1,df2, how =’left’) | データフレーム df1 からすべての行を取り出し、共通するキーを基準にしてデータフレーム df2 から対応するデータを結合します。その結果をデータフレーム df3 に格納します。つまり、データフレーム df1 の各行に対して、共通するキーが df2 に存在すれば、それに対応する df2 のデータが結合されます。最終的なデータフレーム df3 には、結合されたデータが格納されます。 |
右外部結合 | pd.merge(df1,df2, how =’right’) | データフレーム df1 と df2 の間で、共通するキーを基準にして結合を行い、結果をデータフレーム df3 に格納します。この結合操作では、データフレーム df2 のすべての行が取り出され、それぞれの行に対応するキーがデータフレーム df1 に存在すれば、対応するデータが結合されます。最終的なデータフレーム df3 には、この結合されたデータが格納されます。 |
縦結合 | pd.concat([df1,df2]) | concatメソッドを使うと縦にデータを積み上げられます |
内部結合
pd.merge(df1, df2, on=’key’)
というコードで内部結合をします
on=’Key’はどの列を基準にマージを行うか指定しています
データ1
データ2
結合データ
Keyの中で共通しているBとDのみなので
BとDのみ横方向に結合されているのが分かりますね
2つのデータフレームを作成し
内部結合させるコードです
import pandas as pd
# 仮のデータフレームを作成
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
'value': [5, 6, 7, 8]})
# df1とdf2を 'key' 列を基準にして結合する
df3 = pd.merge(df1, df2, on='key')
全結合
df3 = pd.merge(df1,df2,how = ‘outer’)
というコードで全結合しています
データ1,データ2を全て一つのファイルに
合体しますどちらかに共通のキーがあるとき結合
ない場合は空白,Nanが表示される
データ1 :受験名簿
データ2:合否結果
受験番号をKeyとして
二つのデータを結合する
対応するデータがない時はNAとなる
一番下の山田哲也さんは合否のデータがないので空白ですね!
コードを記載します
import pandas as pd
# 受験名簿を読み込み
df1 = pd.read_csv('//content//受験名簿.csv')
# 受験番号を読み込み
df2 = pd.read_csv('//content//合否結果.csv')
# データを全結合
df3 = pd.merge(df1,df2,how = 'outer')
# ファイルを内部結合
df3.to_csv('結合ファイル.csv',index = False,encoding = 'shift-jis')
左側結合
左側結合:df1のデータを全て抜き出して対応するdf2の
データがある場合は結合する
上記のコードをleftに変換する
df3 = pd.merge(df1,df2,how = ‘left’)
結果を以下に示します。
df1のデータはすべて抜き出され
対応するdf2があった場合df2を
合体させるコードなので
全結合と結果は変わっていませんね
右側結合
右側結合:df1のデータを全て抜き出して対応するdf2の
データがある場合は結合する
上記のコードをrightに変換する
df3 = pd.merge(df1,df2,how = ‘right’)
結果を以下に示します
df2のデータはすべて抜き出され
対応するdf1があった場合df1を
合体させるコードなのでdf1の
山田哲也さんのデータは結合されていませんね!
縦結合
共通のキーを見つけてデータを
マージしていましたが
concatメソッドを利用すると
データを縦方向に積み上げられる
データ1 :受験名簿
データ2:追加の受験名簿
結合されたデータは下記になります