布林索引是pandas中非常常用的一種用來過濾資料的操作方法。布林運算子與、或、非的對應關係為:
與 &或 |非 ~下面我們透過例項演示一下布林索引的基本用法。
本文所使用的開發環境:Windows 7 + Python 2.7.17 + PyCharm Community Edition 2016.1.5
程式所使用的演示資料如下所示:
程式的第27行,我們是使用布林索引選取所有貸款餘額大於0的行。由於條件比較簡單,我們直接使用python的比較運算子即可。
程式的執行結果如下所示:
與原始資料對比我們可以看出,本次篩選我們只選取了貸款餘額(萬)列大於0的資料。
如果篩選條件不止一個,我們也可以使用邏輯運算子。邏輯“與”使用運算子 & 實現。程式的第30行,我們把篩選條件變更為貸款餘額大於0元,並且發放金額大於1850萬元。
在這裡我們要注意,由於運算子優先順序的問題,為了保證條件被正確計算,我們要給兩個條件都分別加上圓括號。
和上面的資料對比,發放金額大於1850的資料也被篩選掉了。
下面我們看一下邏輯“或”的用法,邏輯“或”使用的是運算子 | 來實現。程式的第33行,我們選取了貸款餘額大於1300萬,或者發放金額大於1850萬的資料。
透過程式的執行結果,我們可以看出,只要是符合這兩個條件中任意一個的資料行,就會被篩選出來。紅線代表滿足條件的數值列。
邏輯“非”使用的運算子是 ~ 它在鍵盤的左上角,Esc鍵的下方。使用邏輯“非”的時候,也要注意運算子的優先順序。程式的第36行,我們選取的是貸款餘額“不是”大於0的資料,換句話說選取的是貸款餘額小於等於0的資料。
由於貸款餘額沒有小於0的資料,所以篩選出的是貸款餘額等於0的資料,程式的執行結果如下:
我們還可以使用map函式,構造一些更復雜的條件,程式的第39行,我們演示使用find函式篩選出“是否結清”列中包含“已”字的資料。
在lambda函式中引數x代表“是否結清”列中的每行資料。find函式用於查詢資料中的“已”字。如果返回值不是-1,代表查詢到了。map函式返回值為“True”的時候,布林索引將把資料展示出來。為了方便閱讀原始碼,我們還可以把條件獨立出來變成一個變數,例如:criterion1。程式的執行結果如下:
之前的所有例子,我們都是選取DataFrame的所有列。最後我們再結合之前的條件演示一下,如何選取特定的列。程式的第43行,我們在複用criterion1的前提下,要求只選取客戶名稱, 發放金額(萬), 是否結清,這三列。
程式的執行結果如下: