5.35. mnrjoin 参照ファイルの複数範囲条件による自然結合¶
範囲により参照データの項目を結合(join)する。
r=
パラメータで指定した項目値が、 m=
パラメータで指定した参照データの
R=
パラメータで指定した2項目の値の範囲条件(項目1以上項目2未満)に
マッチすれば f=
パラメータの項目を結合する。
マッチする行が複数あれば、それらの行全てが出力され、ちょうど自然結合のような動きをする。
範囲比較される値は、デフォルトで文字列と見なされる。
数値として処理したい場合は r=
パラメータの項目名のあとに%nをつける。
パラメータ¶
i= : 型=str , 任意(default=標準入力)
入力データを指定する。
o= : 型=str , 任意(default=標準出力)
出力データを指定する。
f= : 型=str , 任意(default=全項目)
結合する参照データ上の項目名リスト(複数項目指定可)を指定する。省略するとK=で指定された項目以外の項目を全て結合する。
m= : 型=str , 任意(default=標準入力)
参照データを指定する。このパラメータが省略された時には標準入力が用いられる。(i=
指定ありの場合)
R= : 型=str , 必須
範囲項目名リスト(二項目限定)参照データ上の範囲項目名(start,end)を指定する。第一項目のNULL値は無限小,第二項目のNULL値は無限大として扱われる。
rf= : 型=str , 必須
範囲比較される項目名[%{n}]入力データ上の項目名を指定する。数値として処理したい場合はrf=
パラメータの項目名のあとに%nをつける。
k= : 型=str , 任意(default=キーブレイク処理しない)
入力データ上の突き合わせる項目名リスト(複数項目指定可)ここで指定した入力データの項目とK=
パラメータで指定された参照データの項目が同じ行の項目結合が行われる。
K= : 型=str , 任意(default=k=と同一項目名)
参照データ上の突き合わせる項目名リスト(複数項目指定可)ここで指定した参照データの項目とk=
パラメータで指定された入力データの項目が同じ行の項目結合が行われる。参照データ上にk=
パラメータで指定した入力データ上の項目と同名の項目が存在する場合は指定する必要はない。
n= : 型=bool , 任意(default=False)
参照データにない入力データをNULL値として出力するフラグ。
N= : 型=bool , 任意(default=False)
入力データにない参照データをNULL値として出力するフラグ。
共通パラメータ¶
i= , o= , 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'''date,price 620080123,10 720080123,20 820080203,10 920080203,35 10200804l0,50 11''') 12 13with open('ref1.csv','w') as f: 14 f.write( 15'''date,priceF,priceT,avg 1620080203,5,15,150 1720080203,40,50,200 18''')
基本例
日付項目の値が 20080203
で、 amount
項目の値が 5
以上 15
未満の入力データ行には avg=150
を、
40
以上 50
未満の行には avg=200
を結合する。
1nm.mnrjoin(k="date", f="avg", m="ref1.csv", R="priceF,priceT", rf="price%n", i="dat1.csv", o="rsl1.csv").run() 2### rsl1.csv の内容 3# date%0,price,avg 4# 20080203,10,150
未結合データ出力
n=True
を指定することで、参照ファイルにマッチしない入力ファイルの行( avg=
がNULL値の行)も出力し、
N=True
を指定することで、入力ファイルにマッチしない参照ファイルの行( price=
がNULL値の行)も出力する。
いわゆる外部結合である。
1nm.mnrjoin(k="date", f="avg", m="ref1.csv", R="priceF,priceT", rf="price%n", n=True, N=True, i="dat1.csv", o="rsl2.csv").run() 2### rsl2.csv の内容 3# date%0,price,avg 4# 20080123,10, 5# 20080123,20, 6# 20080203,10,150 7# 20080203,35, 8# 20080203,,200 9# 200804l0,50,
関連メソッド¶
mrjoin 参照ファイルの範囲条件による結合 : 参照データの結合キー(
K=
項目)に重複がなければmrjoin
を使う。