5.32. mnjoin 参照ファイル項目の自然結合¶
k=
パラメータで指定した入力データの項目値と参照データの項目値を比較し、
同じ値の場合 m=
パラメータで指定した参照データにある
f=
パラメータで指定した項目値を自然結合する。
mjoin
コマンドとの違いは、参照データ上のキー項目に重複があってもよい点である。
あるキー値について、入力データ上に \(n\) 件、参照データ上に \(m\) 件のレコードがあった場合、
\(n imes m\) 件のレコードが出力されることになる。
また、 f=
を省略すると、参照データのキー項目以外全ての項目を結合する。
パラメータ¶
i= : 型=str , 任意(default=標準入力)
入力データを指定する。
o= : 型=str , 任意(default=標準出力)
出力データを指定する。
k= : 型=str , 必須
入力データ上の突き合わせる項目名リストを指定する。ここで指定した入力データの項目とK=
パラメータで指定された参照データの項目が同じ行の項目結合が行われる。
f= : 型=str , 任意(default=全項目)
結合する参照データ上の項目名リストを指定する。省略するとキー項目を除いた全ての項目が結合される。
m= : 型=str , 任意(default=標準入力)
参照データを指定する。このパラメータが省略された時には標準入力が用いられる。(i=
指定ありの場合)
K= : 型=str , 任意(default=k=と同一項目名)
参照データ上の突き合わせる項目名リストここで指定した参照データの項目とk=
パラメータで指定された参照データ上にk=
パラメータで指定した入力データ上の
bufcount= : 型=str , 任意(default=)
バッファのサイズ数を指定する。
n= : 型=bool , 任意(default=False)
参照データにない入力データをNULL値として出力するフラグ。
N= : 型=bool , 任意(default=False)
入力データにない参照データをNULL値として出力するフラグ。
共通パラメータ¶
i= , o= , bufcount= , assert_diffSize= , assert_nullkey= , assert_nullin= , assert_nullout= , nfn= , nfno= , x= , q= , tmppath= , precision=
利用例¶
importと入力データ(CSV)の準備
1import nysol.mcmd as nm 2 3with open('dat1.csv','w') as f: 4 f.write( 5'''item,date,price 6A,20081201,100 7A,20081213,98 8B,20081002,400 9B,20081209,450 10C,20081201,100 11''') 12 13with open('ref1.csv','w') as f: 14 f.write( 15'''item,cost 16A,50 17A,70 18B,300 19E,200 20''') 21 22with open('ref2.csv','w') as f: 23 f.write( 24'''item,cost 25A,50 26B,300 27E,200 28''')
基本例
入力ファイルにある item
項目と、
参照ファイルにある item
項目を比較し同じ値の場合、 cost
項目を結合する。
入力ファイル、参照ファイル共に item=A
が2行あり、結果、出力ファイルには2$ imes$2=4行の item=A
が出力されている。
1nm.mnjoin(k="item", f="cost", m="ref1.csv", i="dat1.csv", o="rsl1.csv").run() 2### rsl1.csv の内容 3# item%0,date,price,cost 4# A,20081201,100,50 5# A,20081201,100,70 6# A,20081213,98,50 7# A,20081213,98,70 8# B,20081002,400,300 9# B,20081209,450,300
未結合データ出力
n=True
を指定することで、参照ファイルにマッチしない入力ファイルの行( item="C"
の行)も出力し、
N=True
を指定することで、入力ファイルにマッチしない参照ファイルの行( item="E"
の行)も出力する。
1nm.mnjoin(k="item", f="cost", m="ref2.csv", n=True, N=True, i="dat1.csv", o="rsl2.csv").run() 2### rsl2.csv の内容 3# item%0,date,price,cost 4# A,20081201,100,50 5# A,20081213,98,50 6# B,20081002,400,300 7# B,20081209,450,300 8# C,20081201,100, 9# E,,,200
関連メソッド¶
mjoin 参照ファイルの項目結合 : 参照データのキーが単一化されているのであれば
mjoin
を使うと若干高速。mproduct 参照ファイルの直積結合 : 結合キー関係なく全行の組み合せで結合する。1行だけからなる参照データを入力データ全行に結合する目的で利用することが多い。