■ はじめに
Pandas の データフレームの結合に関してメモっておく。
目次
【1】pd.concat() 1)オプション a) index:連結方向の指定 2)サンプル 3)参考文献 【2】pd.merge() 1)オプション a) how:結合方法を指定 b) on, left_on, right_on : キーとする列を指定 2)サンプル 3)参考文献 【3】DataFrame.append
【1】pd.concat()
* データフレームを結合する
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html
1)オプション
a) index:連結方向の指定
* 連結方向を指定する + 縦方向(axis=0, デフォルト) + 横方向(axis=1)
https://note.nkmk.me/python-pandas-concat/
2)サンプル
import pandas as pd import io csv_header = ["no", "name", "remarks"] csv_data1 = """ 1,Mike,hello 2,Smith,World 3,Tom,!!! """ data_frame1 = pd.read_csv( io.StringIO(csv_data1), sep=',', header=None, names=csv_header) csv_data2 = """ 4,Kevin,Hi 5,Sam,World 6,Ken,!! """ data_frame2 = pd.read_csv( io.StringIO(csv_data2), sep=',', header=None, names=csv_header) # ★注目★ data_frame = pd.concat([data_frame1, data_frame2], ignore_index=True) for index, row in data_frame.iterrows(): print('*[{}]****'.format(index)) for item in csv_header: print("{} - {}".format(item, row[item])) print('*****')
出力結果
*[0]**** no - 1 name - Mike remarks - hello ***** *[1]**** no - 2 name - Smith remarks - World ***** *[2]**** no - 3 name - Tom remarks - !!! ***** *[3]**** no - 4 name - Kevin remarks - Hi ***** *[4]**** no - 5 name - Sam remarks - World ***** *[5]**** no - 6 name - Ken remarks - !! *****
3)参考文献
https://deepage.net/features/pandas-concat.html
【2】pd.merge()
* SQLの内部結合/外部結合のように連結可能。
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html
1)オプション
a) how:結合方法を指定
* 結合の種類は以下の通り。 + 内部結合(inner_join)- how='inner' + 左結合(left_join)- how='left' + 右結合(right_join)- how='right' + 外部結合(outer_join)- how='outer'
b) on, left_on, right_on : キーとする列を指定
* キーとする列を指定 + on - 結合する列名を指定 + left_on - 左側の結合する列名を指定 + right_on - 右側の結合する列名を指定
2)サンプル
import pandas as pd df1 = pd.DataFrame({'X': ['x-1', 'x-2', 'x-3'], 'Y': ['y-1', 'y-2', 'y-3']}) df2 = pd.DataFrame({'X': ['x-1', 'x-2', 'x-4'], 'Z': ['z-1', 'z-2', 'z-4']}) print(pd.merge(df1, df2, how='inner', on='X')) print("*****************") print(pd.merge(df1, df2, how='left', on='X')) print("*****************") print(pd.merge(df1, df2, how='right', on='X')) print("*****************") print(pd.merge(df1, df2, how='outer', on='X'))
出力結果
X Y Z 0 x-1 y-1 z-1 1 x-2 y-2 z-2 ***************** X Y Z 0 x-1 y-1 z-1 1 x-2 y-2 z-2 2 x-3 y-3 NaN ***************** X Y Z 0 x-1 y-1 z-1 1 x-2 y-2 z-2 2 x-4 NaN z-4 ***************** X Y Z 0 x-1 y-1 z-1 1 x-2 y-2 z-2 2 x-3 y-3 NaN 3 x-4 NaN z-4
3)参考文献
https://note.nkmk.me/python-pandas-merge-join/
【3】DataFrame.append
シンプルに連結するには、DataFrame.appendも使える
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.append.html
df1.append(df2)
参考文献
https://sinhrks.hatenablog.com/entry/2015/01/28/073327
https://qiita.com/hikaru_/items/e9c1356f674f2baa9e64
関連記事
Pandas ~入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/22/014957
Pandas ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/10/14/000000
Pandas ~ 基本編 / データのクレンジング ~
https://dk521123.hatenablog.com/entry/2020/04/06/235555
Pandas ~ データ集計編 ~
https://dk521123.hatenablog.com/entry/2021/04/07/105858
Pandas ~ 基本編 / CSV編 ~
https://dk521123.hatenablog.com/entry/2020/11/17/000000
Python ~ 基本編 / CSV ~
https://dk521123.hatenablog.com/entry/2019/11/07/214108
NumPy ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2018/03/28/224532
Python 3 エンジニア認定データ分析試験
https://dk521123.hatenablog.com/entry/2020/12/12/000000