1. 程式人生 > >pandas(資料框部分02)

pandas(資料框部分02)

接著上一期的pandas模組介紹與應用,今天我們來聊聊如何藉助於pandas模組進行資料的預處理,內容包括資料集變數與觀測的篩選、變數的重新命名、資料型別的變換、排序、重複觀測的刪除、和資料集的抽樣。

一、資料篩選

以iris資料集為例,想從資料集中取出某列(序列物件)或某幾列該如何操作?


在pandas取出一列有兩種方法,一種是比較普遍適用的名稱索引法,另一種則是點取法。看看下面的例子就可以理解了:


如果使用點取法取出資料集中的某列,需要注意的是列的名稱必須是一個整體,例如stu age或stu.age等格式的變數名就不能使用點取法。

對應到R語言中,也有兩種取列的方法,分別是索引法$取法


需要注意的是,如果你使用名稱索引法,列名稱一定要寫在逗號,後面

,因為逗號前面的內容表示要取的行,逗號後面的內容表示要取的列。

如果你需要取出的不僅僅是一列資料,而是多列,那不管是Python還是R語言只能使用名稱索引或位置索引了。接下來再來看看如何按照某些條件取出想要的觀測行:

一個變數的觀測篩選


兩個變數的觀測篩選


需要注意的是:多個變數的篩選,可以是或(|)關係、可以是且(&)關係還可以是非(~)關係,一定要用圓括號把條件括起來。

兩個變數的觀測篩選並篩選部分變數


在Python中通過索引的方式獲取資料的部分子集,雖然有loc和iloc可以實現取子集,但我更推薦loc函式的應用,因為個人覺得iloc應用的場景比較少,它是基於行或列的位置進行資料篩選的。例如


R語言中,獲取資料集的子集就更容易了,這裡強烈推薦使用subset函式。按照上面Python的例子用R語言實現一遍:

一個變數的觀測篩選


兩個變數的觀測篩選


兩個變數的觀測篩選並篩選部分變數


二、變數的刪除

有時,在一張表裡你可能需要刪除與建模或分析無關緊要的變數,如使用者id、姓名、郵編號碼等。在Python中,你可以藉助於drop函式非常輕鬆的刪除指定的變數。


需要注意的是,該函式預設的axis=0,表示刪除行觀測,如果需要刪除列,就要將asix設定為1。記住,此時雖然刪除了兩個變數,但iris資料集本身是沒有變化的,如果你需要改變iris資料集,需要設定inplace為True

在R語言中,我們仍然使用subset函式進行變數的篩選

,通過select引數,將需要刪除的變數前面加上負號(-)即可,如下:


三、變數重新命名

如iris資料集,由於第一個變數的名稱為“Sepal.Length”,中間有句點號,故Python不可以使用點取法獲得該資料集的第一個變數,而只能通過索引獲取。如果把該變數的名稱改為“Sepal_Length”,就可以使用點取法了,該如何更換變數名呢?rename函式可以幫助我們解決問題:


是不是很方便,在R語言中可以使用plyr包中的rename函式實現相同的功能,具體看如下的例子:


四、資料型別轉化

使用Python進行建模的話,需要所有的輸入變數均為數值型變數,然而手中的實際資料集並非全是數值型變數,該如何把字元型數值變數轉化為數值變數呢?

字元型數值轉數值


上面建立的表,顯示age變數和outcome變數為字元型變數,就需要將其轉化為整數型和浮點型,具體可以通過astype函式實現:


通過字典的方式,對不同的變數設定不同的資料型別。

R語言中,可以使用as.numeric()和as.integer()函式完成字元型數值變數的數值型變換:


需要注意的是,對於字串變數,讀入到R中,會強制轉化為因子型變數,故將age變數和outcome變數轉化為數值型變數時,需要先轉化為字串再轉數值,否則會出現意想不到的結果!!

五、資料集的排序 

如果你需要對你的資料集進行排序,Python中pandas模組也提供了非常好用的sort_values函式。我們舉例說明:


再來看看R語言中是如何實現資料集的排序的,你只需要下載並載入plyr包,然後呼叫arrange函式實現上面一致的結果:


arrange函式預設按指定變數進行升序排序,如果你需要降序處理,則需要把變數放在desc()內

六、資料去重

在資料清洗中,往往都要檢查一下資料集的觀測行是否有重複,如果存在重複的話必須將其刪除,來看看Python的pandas模組是如何檢查資料集是否重複,並完成資料集的去重


由上面的例子可知,duplicated函式可以用來檢查資料集是否重複,如果重複,則會在重複的行顯示True。然後,通過drop_duplicates函式對資料集的重複觀測進行刪除。這兩個函式均有subset引數,預設對資料集的所有變數進行重複性檢測和刪除,如果你需要指定某些變數的重複性檢查和刪除就可以往subset引數傳遞變數,例如:


R語言中,仍然通過duplicated函式對資料集的觀測行進行重複性檢查,然後再通過索引的方式,將重複的觀測進行刪除


七、抽樣

最後,我們再來講講如何使用pandas模組進行資料集的抽樣,畢竟抽樣在建模或機器學習中還是非常常用的,通過抽樣構建訓練集和測試集,訓練集用來模型的生成,測試集用來模型的檢驗。pandas模組有一個sample函式可以幫助我們完成抽樣的任務:

先來看一下sample函式的幾個重要引數

sample(n=None, frac=None, replace=False, weights=None, random_state=None)
n:指定抽樣的個數
frac:指定抽樣的比例
replace:指定是否有放回的抽樣,預設為無放回抽樣
weights:指定每個樣本被抽中的概率,預設每個樣本抽中的概率相等
random_state:指定抽樣的隨機種子,預設無固定的隨機種子,即每次抽樣的結果都不一樣

抽樣例項


訓練集可以直接從sample函式中抽取出來,測試集則通過索引的方式,將訓練集中的行號排除出去。


R語言中,抽樣還是使用sample函式,而且引數都跟pandas模組中的sample函式類似。

sample(x = , size = ,replace = FALSE, prob = NULL)

x為被抽樣的物件

size為抽取的樣本量

replaece指定是否有放回的抽樣,預設無放回抽樣

prob指定樣本抽中概率,預設每個樣本被抽中的概率一樣

抽樣例項


今天我們的內容就介紹到這邊,歡迎大家拍磚。下期我們來聊聊pandas模組的資料框DataFrame第三部分。主要涉及缺失值處理、資料集的合併和連線、分組彙總、啞變數生成、連續數值的區間化等操作。

每天進步一點點2015

學習與分享,取長補短,關注小號!


長按識別二維碼馬上關注