pandas入門 – DataFrameを結合する

2つのDataFrameを縦に結合

2つのDataFrameを縦に結合するにはpandasのconcat()を利用します 。

pd.concat([DataFrame1,DataFrame2])
AB
0A0B0
1A1B1
2A2B2
AB
3A3B3
4A4B4

例えば、上記のような2つのデータがあった場合には以下のように結合されます。

AB
0A0B0
1A1B1
2A3B2
3A3B3
4A4B4

コード

import pandas as pd

data1 = pd.read_csv('data1.csv')
data2 = pd.read_csv('data2.csv')

data3 = pd.concat([data1, data2])

2つのDataFrameを横に結合

AB
0A0B0
1A1B1
2A2B2
CD
0C0D0
1C1D1
2C2D2

引数にaxis=1を与えると横に結合できます。

ABCD
0A0B0C0D0
1A1B1C1D1
2A3B2C2D2

コード

import pandas as pd

data1 = pd.read_csv('data1.csv')
data2 = pd.read_csv('data2.csv')

data3 = pd.concat([data1, data2], axis=1)

異なる形式のデータを特定のカラムをキーに結合する

異なる形式のデータを特定のカラムをキーに結合するにはmerge()を利用します。

pd.merge(DataFrame1,DataFrame2, on='ColumnName')
AB
0A0B0
1A1B1
2A2B2
BD
0B0D0
1B1D1
2B2D2

Bで結合

ABD
0A0B0D0
1A1B1D1
2A2B2D2

コード

import pandas as pd

data1 = pd.read_csv('data1.csv')
data2 = pd.read_csv('data2.csv')

data3 = pd.merge(data1, data2, on='B')

2つのデータの異なるカラム名をキーに結合する

異なるカラム名で結合するには引数にonではなくleft_onright_onを利用します。

AB
0A0B0
1A1B1
2A2B2
CD
0B0D0
1B1D1
2B2D2

BCで結合

ABCD
0A0B0B0D0
1A1B1B1D1
2A2B2B2D2

コード

import pandas as pd

data1 = pd.read_csv('data1.csv')
data2 = pd.read_csv('data2.csv')

data3 = pd.merge(data1, data2, left_on='B', right_in='C')

merge関数のオプションに結合方法を指定する

merge関数で結合方法を指定するには引数にhow='結合方法'を追加する

種類

  • inner
  • outer
  • left
  • right

inner

pd.merge(data1, data2, on='B'), how='inner'

data1とdata2の両方にあるキーの値のみ残り、片方にしかないものは削除されます

AB
0A0B0
1A1B1
2A3B2
BD
0B0D0
1B1D1
2B3D3

Bで結合

ABD
0A0B0D0
1A1B1D1

left

pd.merge(data1, data2, on='B'), how='left'

data1(左)にしかないデータは全て残り、data1(左)の存在しないキーのデータは削除されます。
また、data2(右)にB2がないのでD列はNaNで補完されます。

AB
0A0B0
1A1B1
2A2B2
BD
0B0D0
1B1D1
2B3D3

Bで結合

ABD
0A0B0D0
1A1B1D1
2A2B2NaN

right

rigntはleftとは逆でdata2(右)にしかないデータは全て残り、data2(右)の存在しないキーのデータは削除されます。

outer

pd.merge(data1, data2, on='B'), how='outer'

outerの場合は全てのキーの値を残します。存在しない要素はNaNで補完されます。

AB
0A0B0
1A1B1
2A2B2
BD
0B0D0
1B1D1
2B3D3

Bで結合

ABD
0A0B0D0
1A1B1D1
2A2B2NaN
3NaNB3D3