antd 获取table选中行数据_Excel数据匹配:函数法+PQ法+PB法
無論是在辦公室還是實驗室,數據匹配都是我們的日常任務。
假設一個情境來說明數據匹配的邏輯:
下圖是一張【總體表】,記錄了動畫片《葫蘆兄弟》中10位主要角色的姓名、身份和能力,這是我們需要的數據。
為了獲得這張表,我們派出了兩只調查小隊:A和B。經過艱苦的調查,兩隊都沒有獲得【總體表】中的完整信息,而是分別得到了部分角色的身份和能力,如下所示:
▲ 身份表1▲ 能力表1如何才能將這兩張表中的數據匹配起來呢?
我們發現,角色的姓名是【唯一】的,通過核對兩張表中的姓名列,就能將身份和能力對應起來,我們將其稱為【關鍵列】。
接下來,就到了數據匹配的時間。
1 方法一:VLOOKUP函數法
VLOOKUP函數的語法如下:
=VLOOKUP(查詢值,數據源,顯示序列,匹配參數)其中,查詢值是【關鍵列】或者關鍵列中的某一個值;數據源是另一張待匹配的表格;顯示序列表示匹配完成后顯示在VLOOKUP公式列的數據來自數據源的第幾列;匹配參數是控制精確匹配和模糊匹配的啞元。
本例中,我們這樣寫公式:查詢值來自本表(身份表1)的姓名列(用[@姓名]表示);數據源來自能力表1的全部數據(用能力表1[#全部]表示,[#全部]可以省略);顯示序列為2,即顯示能力表的第2列(能力列);匹配參數為0,即精確匹配。
得到如下結果:
可以看出,有幾行沒有匹配上,顯示為#N/A,什么原因呢?很簡單,這是因為身份表1中的紅娃、紫娃和蝎子精并沒有出現在能力表1中,也就是說B隊沒有遇到這三個人。
同時,千萬不要忽略掉,能力表1中的橙娃、青娃和爺爺并沒有出現在合并結果中——這種保留所有查詢值、但不用展示數據源所有行的匹配方式稱為【左聯接】;當然,你會發現如果你需要【右聯接】,只需要把查詢表和數據源的位置交換一下就可以了。因此,也有人說,VLOOKUP是一種“假的”左聯接。
VLOOKUP說來簡單,但同學們在使用過程中常會產生2個疑問:第一,模糊查詢到底有什么用?第二,能不能讓沒匹配上的行不顯示#N/A?
針對第1個問題,模糊查詢是用來查詢【一段范圍】而不是【一個值】的,比如我們希望將60分以下都匹配為不及格,60-69分匹配為及格,70-79分匹配為中等,80-89匹配為良好,90分以上匹配為優秀。當然,用多層嵌套的IF函數完全可以實現,但使用VLOOKUP的模糊匹配更加簡單。我們建立成績表(左)和等級表(右),寫入公式如下,即可得到滿意的結果。其原理是,當查詢值小于數據源關鍵列的某一行時,返回上一行的結果。
針對第2個問題,一般有兩種方法。較為常用的是使用后文將要提到的【內聯接】,干脆就把沒匹配上的數據行剔除掉;如果一定要保留,我們也可以使用IFERROR函數將#N/A顯示為空白或其他表示缺失值的符號(比如999)。
VLOOKUP法有沒有缺點呢?有。
第一,關鍵列必須在數據源的第1列。考慮如下能力表2,關鍵列(姓名)是第2列,這時想使用VLOOKUP必須先交換姓名列和能力列的位置,同學們可以自己嘗試一下。
▲ 能力表2
第二,VLOOKUP沒有【內聯接】。如果我們只想保留匹配上的數據行,就要將出現#N/A的行手動刪去或進行篩選。
2 方法二:Power Query法
Power Query是針對數據查詢設計的程序,已經內嵌在Excel 2016的【數據】選項卡中。使用PQ來匹配數據就非常傻瓜了,不需要寫任何公式。
為體現出PQ法的優勢,我們使用葫蘆兄弟的身份表1和能力表2進行內聯接匹配,僅保留匹配上的行。操作如下:
第1步:打開Excel,點擊【數據】選項卡—【新建查詢】—【從文件】—【從工作簿】—選中存放身份表和能力表的工作簿。
第2步:在【導航器】中選中身份表和能力表,界面右側可以預覽部分數據。
完成第2步后,【工作簿查詢】側邊欄就會彈出,選中表格就能看到相關屬性。
第3步:在身份表上點擊鼠標【右鍵】—【合并】。
第4步:這一步很關鍵。在【合并】界面,下拉【選擇】左表(身份表)和右表(能力表)—在兩張表上【選擇】關鍵列(選中后會有如圖的背景色)—【勾選】僅包括匹配的行(內聯接)—【確定】。
第5步:點擊【NewColumn列】右側的【擴展】按鈕—【選中】擴展—【勾選】能力列—【取消勾選】使用原始列名作為前綴—【確定】。
這樣,數據就全部匹配好了。看似步驟很多,但由于不需要用鍵盤,操作起來還是非常快的。結果如下:
對于了解M函數的分析師而言,還可以直接撰寫高級查詢命令:
關注一下第2行的參數【JoinKind.*】,PQ提供了Inner(內聯接)、LeftOuter(左外聯接)、RightOuter(右外聯接)、FullOuter(全外聯接)、LeftAnti(左反聯接)和RightAnti(右反聯接)等6種主要聯接方式。含義如下:
我們可以手動修改代碼得到想要的效果。以全外聯接為例,將代碼修改為
let????源?=?Table.NestedJoin(身份表2,{"姓名"},能力表2,{"姓名"},"NewColumn",JoinKind.FullOuter),
????#"展開的“NewColumn”"?=?Table.ExpandTableColumn(源,?"NewColumn",?{"能力",?"姓名"},?{"能力",?"姓名.1"})
in
????#"展開的“NewColumn”"
可以得到外聯接結果:
Power Query有沒有缺點呢?也是有的。這種方法過于依賴M函數,對于看不懂M函數或記不得聯接名稱的同學而言,很多聯接方式都不能點一點就實現。
3 方法三:Power BI法
了解了Power Query后再來看Power BI就會覺得豁然開朗。本質上,Power BI就是Excel + Power Query + Power Pivot,它糅合了三者的優點;當然,也不可避免的繼承了三者的不同。
Excel使用VBA語言進行編程,Power Query使用M函數進行查詢,Power Pivot使用DAX函數進行透視;三者互不兼容地被Power BI繼承了下來。同時Power BI本身接受Python和R語言,使用插件時還能接受Java等其他語言。靈活性是有了,但分析師地頭發確實是沒有了。
第1步:與Excel中類似,我們先通過【獲取數據】載入身份表和能力表,再通過【編輯查詢】進入Power Query界面。
第2步:點擊右上角的【合并查詢】進入匹配界面。可以看出,這里我們是可以通過鼠標點擊【聯接種類】下拉菜單去選擇6種主要聯接方式的,這就非常方便了。
Power BI匹配數據只能做到這個程度了嗎?還差得遠呢,Power BI能直接實現復合關鍵列匹配。如果我們使用VLOOKUP進行匹配,查詢值必須是唯一的;考慮以下表格,班級和學號都不能作為關鍵列,常見的做法是用&將兩個單元格合并作為關鍵列。
在Power BI中就不需要這么麻煩了,在合并界面按住【Ctrl】點多列就行。
需要提醒同學們注意,Power BI中還有一個功能叫【關系】,其內在邏輯跟合并很像,但只建立關聯而不真的合并為一張新的表,更多地用在一對多的數據下鉆上,千萬不要混淆。
4 其他合并方法
除了使用Excel合并數據外,還有一些我們課內介紹過的工具可以實現合并操作。
Python
import?pandas?as?pddata1?=?pd.read_csv(r'd:\data1.txt',sep='\t',header=0)
data2?=?pd.read_csv(r'd:\data2.txt',sep='\t',header=0)
#?匹配
data1.merge(data2,on='姓名',how='outer')
R
data1"d:\\data1.txt",header=TRUE,fileEncoding="utf-8")data2"d:\\data2.txt",header=TRUE,fileEncoding="utf-8")
#?匹配
merge(data1,data2,by="姓名",all=TRUE)
Python和R的優點在于,當匹配前兩張表中的關鍵列具有相同的標簽時,匹配后會自動將關鍵列合并。
Stata
.?use?"D:\data1.dta".?merge?1:1?姓名?using?"D:\data2.dta"
/*?結果:
????Result???????????????????????????#?of?obs.
????-----------------------------------------
????not?matched?????????????????????????????6
????????from?master?????????????????????????3??(_merge==1)
????????from?using??????????????????????????3??(_merge==2)
????matched?????????????????????????????????4??(_merge==3)
????-----------------------------------------
*/
Stata默認使用外聯接,但會新生成一列_merge來區分哪些是左反聯接(_merge==1)、右反聯接(_merge==2)和內聯接(_merge==3);在命令中,我們可以直接使用keep選項來控制聯接方式,比如keep(match master)就是左外聯接,keep(match using)就是右外聯接。
注意,Python、R和Stata都只能認Excel工作表,而不認Excel表。
Tableau
使用Tableau匹配數據是最簡單的,因為這個軟件將合并數據做在了數據載入頁面;換言之,當你載入兩個數據表的時候,Tableau立刻就會問你——要不要合并一下啊?還貼心地用圖示地方式給出4種基本聯接方式。
5 結束語
經過今天的學習,往后我們在合并數據時可以考慮更加合適的手段,不必因為不會使用VLOOKUP函數而著急。Excel還有很多的功能等待大家去挖掘,老辦法不一定總是好辦法。
總結
以上是生活随笔為你收集整理的antd 获取table选中行数据_Excel数据匹配:函数法+PQ法+PB法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq能传多大的视频(PC版官方网站)
- 下一篇: AOC AG455UCX 显示器开卖:4