數據分析實踐入門(三):數值操做

做者 | CDA數據分析師

咱們把菜品挑選出來之後,就能夠開始切菜了。好比要作涼拌黃瓜絲,吧黃瓜找出來之後,你就能夠把黃瓜切成絲了。segmentfault

1、數值替換

數值替換就是將數值A替換成B,能夠用在異常值替換處理、缺失值填充處理中。主要有一對一替換、多對一替換、多對多替換三種替換方法。app

一、一對一替換svg

一對一替換是將某一塊區域中的一個值所有替換成另外一個值。已知如今有一個年齡值是240,很明顯這是一個異常值,咱們要把它替換成一個正常範圍內的年齡值(用正常年齡的均值33),怎麼實現呢?函數

(1)Excel實現spa

在Excel中對某個值進行替換,首先要把待替換的區域選中,若是隻是替換某一列中的值,只須要選中這一列便可;若是要在一片區域中進行替換,那麼拖動鼠標選中這一片區域。而後依次單擊編輯菜單欄中的查找和選擇>替換選項(以下圖所示)便可調出替換界面。使用快捷鍵Ctrl+H也能夠調出替換界面。orm

下圖爲替換界面,分別輸入查找內容和替換內容,而後根據須要單擊所有替換或者替換便可。cdn

(2)Python實現排序

在Python中對某個值進行替換利用的是replace ( ) 方法,replace ( A,B )表示將A替換成B。索引

上面的代碼是對年齡這一列進行替換,因此把年齡這一列選中,而後調用replace ( ) 方法。有時候要對整個表進行替換,好比對全表中的缺失值進行替換,這個時候replace ( ) 方法就至關於fillna ( ) 方法了。rem

np.NaN是Python中對缺失值的一種表示方法。

二、多對一替換

多對一替換就是把一塊區域中的多個值替換成某一個值,已知如今有三個異常年齡(240、260、280),須要把這三個年齡都替換成正常範圍年齡的平均值33,該怎麼實現呢?

(1)Excel實現

在Excel中須要藉助if函數來實現多對一替換。已知年齡這一列是D列,要想對多個異常值進行替換,能夠經過以下函數實現。

上面的公式藉助了Excel中的 OR ( ) 函數,表示若是D列等於240、260或者280時,該單元格的值爲33,不然爲D列的值。替換後的結果以下圖所示。

(2)Python實現

在Python 中實現多對一的替換比較簡單,一樣也是利用 replace ( ) 方法, replace ( [A,B],C )表示將A、B替換成C。

三、多對多替換

多對多替換其實就是某個區域中多個一對一的替換。好比將年齡異常值240替換成平均值減一,260替換成平均值,280替換成平均值加一,該怎麼實現呢?

(1)Excel實現

若想在Excel中實現,須要藉助函數,且須要多個if嵌套語句來實現,一樣已知年齡列爲D列,具體函數以下:

下圖爲該函數執行的流程。

替換後的結果以下圖所示。

(2)Python實現

在Python中若想實現多對多的替換,一樣是藉助replace ( ) 方法,將替換值與待替換值用字典的形式表示,replace({"A":"a","B":"b"}表示用a替換A,用b替換B。

2、數值排序

數值排序是按照具體數值的大小進行排序,有升序和降序兩種,升序就是數值由小到大排列,降序是數值由大到小排列。

一、按照一列數值進行排序

按照一列數值進行排序就是整個數據表都以某一列爲準,進行升序或降序排列。

(1)Excel實現

在Excel中想要按照某列進行數值排序,只要選中這一列的字段名,而後單擊編輯菜單欄下的排序和篩選按鈕,在下拉菜單中選擇升序或降序選項便可,操做流程以下圖所示。

按照銷售ID進行升序排列先後的結果以下圖所示。

(2)Python實現

在 Python 中咱們若想按照某列進行排序,須要用到 sort_values ( ) 方法,在sort_values ( )後的括號中指明要排序的列名,以及升序仍是降序排列。

上面代碼表示df表按照col1列進行排序,ascending = False表示按照col1列進行降序排列。ascending 參數默認值爲 True,表示升序排列。因此,若是是要根據 col1列進行升序排序,則能夠只指明列名,不須要額外聲明排序方式。

二、按照有缺失值的列進行排序

(1)Python實現

在Python中,當待排序的列中有缺失值時,能夠經過設置na_position參數對缺失值的顯示位置進行設置,默認參數值爲last,能夠不寫,表示將缺失值顯示在最後。

經過設置na_position參數將缺失值顯示在最前面。

三、按照多列數值進行排序

按照多列數值排序是指同時依據多列數據進行升序、降序排列,當第一列出現重複值時按照第二列進行排序,當第二列出現重複值時按照第三列進行排序,以此類推。

(1)Excel實現

在Excel中實現按照多列排序,選中待排序的全部數據,單擊編輯菜單欄下的排序和篩選按鈕,在下拉菜單中選擇自定義排序選項就會出現以下圖所示界面。添加條件就是添加按照排序的列,在次序裏面能夠單獨定義每一列的升序或者降序。

舉個例子,對下圖左側的Before表先按照銷售ID升序排列,當遇到重複的銷售ID時,再按成交時間降序排列,得出下圖右側的After表。

(2)Python實現

在 Python 中實現按照多列進行排序,用到的方法一樣是 sort_values ( ),只要在sort-values後的括號中以列表的形式指明要排序的多列列名及每列的排序方式便可。

上面代碼表示df表先按照col1列進行升序排列,當col1列遇到重複時,再按照col2列進行降序排列。對於表df咱們依舊先按照銷售ID升序排列,當遇到重複的銷售ID時,再按成交時間降序排列,代碼以下所示。

3、數值排名

數值排名和數值排序是相對應的,排名會新增一列,這一列用來存放數據的排名狀況,排名是從1開始的。

一、Excel實現

在Excel中用於排名的函數有RANK.AVG()和RANK.EQ()兩個。

當待排名的數值沒有重複值時,這兩個函數的效果是徹底同樣的,兩個函數的不一樣在於處理重複值方式的不一樣。

RANK.AVG(number,ref,order)

number表示待排名的數值,ref表示一整列數值的範圍,order用來指明降序仍是升序排名。當待排名的數值有重複值時,返回重複值的平均排名。

對銷售ID進行平均排名之後的結果以下圖所示。圖中銷售ID爲1的值有兩個,假設一個排名是1,另外一個排名是2,那麼兩者的均值就是1.5,因此平均排名就是1.5;銷售ID爲2的值一樣有兩個,一樣假設一個排名爲3,另外一個排名是4,那麼兩者的均值是3.5,因此平均排名就是3.5;銷售ID爲3的值沒有重複值,因此排名就是5。

RANK.EQ( number,ref,order )

RANK.EQ 的參數值與 RANK.AVG 的意思同樣。當待排名的數值有重複值時, RANK.EQ返回重複值的最佳排名。

對銷售ID進行最佳排名之後的結果以下圖所示。圖中銷售ID爲1的值有兩個,第一個重複值的排名爲1,因此兩個值的最佳排名均爲1;銷售ID爲2的值也有兩個,第一個重複值的排名爲3,因此兩個值的最佳排名均爲3;銷售ID爲3的值沒有重複值,最佳排名爲5。

二、Python實現

在Python中對數值進行排名,須要用到rank ( ) 方法。Rank ( ) 方法主要有兩個參數,一個是ascending,用來指明升序排列仍是降序排列,默認爲升序排列,和Excel中order的意思一致;另外一個是method,用來指明待排列值有重複值時的處理狀況。下表是參數method可取的不一樣參數值及說明。

method取值爲average時的排名狀況,與Excel中RANK.AVG函數的一致。

method取值爲first時的排名狀況,銷售ID爲1的值有兩個,第一個出現的排名爲1,第二個出現的排名爲2;銷售ID爲2的以此類推。

method取值爲min時的排名狀況,與Excel中RANK.EQ函數的一致。

method取值爲max時的排名狀況,與method取值min時相反,銷售ID爲1的值有兩個,第二個重複值的排名爲2,因此兩個值的排名均爲2;銷售ID爲2 的值有兩個,第二個重複值的排名爲4,因此兩個值的排名均爲4。

4、數值刪除

數值刪除是對數據表中一些無用的數據進行刪除操做。

一、刪除列

(1)Excel實現

在Excel中,要刪除某一列或某幾列,只須要選中這些列,而後單擊鼠標右鍵,在彈出的菜單中選擇刪除選項便可(或者單擊鼠標右鍵之後按D鍵),以下圖所示。

(2)Python實現

在Python中,要刪除某列,用到的是drop ( ) 方法,即在drop方法後的括號中指明要刪除的列名或者列的位置,即第幾列。

在drop方法後的括號中直接傳入待刪除列的列名,須要加一個參數axis,並讓其參數值等於1,表示刪除列。

還能夠在drop方法後的括號中直接傳入待刪除列的位置,但也須要用axis參數。

也能夠將列名以列表的形式傳給columns參數,這個時候就不須要axis參數了。

二、刪除行

(1)Excel實現

在 Excel 中,要刪除某些行使用的方法與刪除列是一致的,先選中要刪除的行,而後單擊鼠標右鍵,在彈出的下拉菜單中選擇刪除選項就能夠刪除行了。

(2)Python實現

在Python中,要刪除某些行用到的方法依然是drop ( ) ,與刪除列相似的是,刪除行也要指明行相關的信息。

在drop方法後的括號中直接傳入待刪除行的行名,並讓axis參數值等於0,表示刪除行。

除了傳入行索引名稱,還能夠在drop方法後的括號中直接傳入待刪除行的行號,也須要用axis參數,並讓其參數值等於0。

也能夠將待刪除行的行名傳給index參數,這個時候就不須要axis參數了。

三、刪除特定行

刪除特定行通常指刪除知足某個條件的行,咱們前面的異常值刪除算是刪除特定的行。

(1)Excel實現

在Excel中刪除特定行分爲兩步,第一步先將符合條件的行篩選出來,第二步選中這些篩選出來的行而後單擊鼠標右鍵,在彈出的下拉菜單中選擇刪除選項。

(2)Python實現

在Python中刪除特定行使用的方法有些特殊,咱們不直接刪除知足條件的值,而是把不知足條件的值篩選出來做爲新的數據源,這樣就把要刪除的行過濾掉了。

在以下例子中,要刪除年齡值大於等於40對應的行,咱們並不直接刪除這一部分,而是把它的相反部分取出來,即把年齡小於40的行篩選出來做爲新的數據源。

5、數值計數

數值計數就是計算某個值在一系列數值中出現的次數。

一、Excel實現

在Excel中實現數值計數,咱們使用的是COUNTIF ( ) 函數,COUNTIF ( ) 函數用來計算某個區域中知足給定條件的單元格數目。

range表示一系列值的範圍,criteria表示某一個值或者某一個條件。

銷售ID的值的計數結果以下圖所示。銷售ID爲1的值在F2:F6這個範圍內出現了兩次;銷售ID爲2的值在該範圍內也出現了兩次;銷售ID爲3的值出現了1次。

二、Python實現

在Python中,要對某些值的出現次數進行計數,咱們用到的方法是value_counts ( ) 。

上面代碼運行的結果表示銷售ID爲2的值出現了兩次,銷售ID爲1的值出現了兩次,銷售ID爲3的值出現了1次。這些是值出現的絕對次數,還能夠看一下不一樣值出現的佔比, 只須要給 value_ counts ( )方法傳入參數normalize = True便可。

上面代碼的運行結果表示銷售ID爲2的值的佔比爲0.4,銷售ID爲1的值的佔比爲0.4,銷售ID爲3的值的佔比爲0.2。上面銷售ID的排序是二、一、3,這是按照計數值降序排列的(0.四、0.四、0.2),經過設置sort = False能夠實現不按計數值降序排列。

6、惟一值獲取

惟一值獲取就是把某一系列值刪除重複項之後的結果,通常能夠將表中某一列認爲是一系列值。

一、Excel實現

在Excel中,咱們若想查看某一列數值中的惟一值,能夠把這一列數值複製粘貼出來,而後刪除重複項,剩下的就是惟一值了。

二、Python實現

在Python中,咱們要獲取一列值的惟一值,總體思路與Excel的是一致的,先把某一列的值複製粘貼出來,而後用刪除重複項的方法實現,關於刪除重複項在前面講過了,本節用另外一種獲取惟一值的方法unique ( ) 實現。

舉個例子,對錶df中的銷售ID取惟一值,先把銷售ID取出來,而後利用unique ( ) 方法獲取惟一值,代碼以下所示。

7、數值查找

數值查找就是查看數據表中的數據是否包含某個值或者某些值。

一、Excel實現

在Excel中咱們要想查看數據表中是否包含某個值能夠直接利用查找功能。首先要把待查找區域選中,能夠選擇一列或者多列,若是不選,則默認在全表中查詢,而後單擊編輯菜單欄的查找和選擇按鈕,在下拉菜單中選擇查找選項,以下圖所示。

下圖爲選擇查找選項後彈出的查找和替換對話框(也可使用快捷鍵Ctrl + F打開查找和替換對話框),在查找內容框輸入要查找的內容便可,能夠選擇查找所有,這樣就會把全部查找到的內容顯示出來;也能夠選擇查找下一個,這樣會把查找結果一個一個顯示出來。

二、Python實現

在Python中查看數據表中是否包含某個值用到的是 isin ( )方法,並且能夠同時查找多個值,只須要在isin ( ) 方法後的括號中指明便可。

能夠將某列數據取出來,而後在這一列上調用 isin ( )方法,看這一列中是否包含某個/些值,若是包含則返回True,不然返回False。

也能夠針對全表查找是否包含某個值。

8、區間切分

區間切分就是將一系列數值分紅若干份,好比如今有10我的,你要根據這10我的的年齡將他們分爲三組,這個切分過程就稱爲區間切分。

一、Excel實現

在Excel中實現區間切分咱們藉助的是if函數,具體公式以下:

if函數的實現流程以下圖所示。

下圖爲利用if嵌套函數實現的結果。

二、Python實現

在Python中對區間切分利用的是cut ( ) 方法,cut ( )方法有一個參數bins用來指明切分區間。

cut ( ) 方法的切分結果是幾個左開右閉的區間,(0,3]就表示大於0小於等於3,(3,6]表示大於3小於等於6,(6,10]表示大於6小於等於10。

與cut ( ) 方法相似的還有qcut ( ) 方法,qcut ( ) 方法不須要事先指明切分區間,只須要指明切分個數,即你要把待切分數據切成幾份,而後它就會根據待切分數據的狀況,將數據切分紅事先指定的份數,依據的原則就是每一個組裏面的數據個數儘量相等。

在數據分佈比較均勻的狀況下,cut ( ) 方法和 qcut ( ) 方法獲得的區間基本一致,當數據分佈不均勻,即方差比較大時,二者獲得的區間的誤差就會比較大。

9、插入新的行或列

在特定的位置插入行或者列也是比較經常使用的操做。具體的插入操做有兩個關鍵要素,一個是在哪插入,另外一個是插入什麼。

一、Excel實現

在Excel中要插入行或列首先要肯定在哪一行或哪一列前面插入,而後選中這一列或這一行單擊鼠標右鍵,在彈出的下拉菜單中選擇插入選項便可。

要在惟一識別碼列前面插入一列,選中惟一識別碼這一列而後單擊鼠標右鍵,在彈出的下拉菜單中選擇插入選項便可,以下圖所示。

完成上面的操做後,就會有一個新的空行或空列,在空行或空列裏面輸入要插入的數據便可。

二、Python實現

在Python中沒有專門用來插入行的方法,能夠把待插入的行看成一個新的表,而後將兩個表在縱軸方向上進行拼接。關於表拼接在後面的章節會講。

在Python中插入一個新的列用到的方法是insert ( ),在insert方法後的括號中指明要插入的位置、插入後新列的列名,以及要插入的數據。

還能夠直接以索引的方式進行列的插入,直接讓新的一列等於某列值便可。

上面的代碼表示新插入一列名爲商品類別的值,這一列的值就是後面列表中的值。

10、行列互換

所謂的行列互換(又稱轉置)就是將行數據轉換到列方向上,將列數據轉換到行方向上。

一、Excel實現

在Excel中行列互換(轉置)須要先把待轉置的內容複製,而後粘貼在新的區域中,粘貼選項選擇轉置便可,轉置選項以下圖所示。

轉置先後的效果對好比下圖所示。

二、Python實現

在 Python 中,咱們直接在源數據表的基礎上調用.T 方法便可獲得源數據錶轉置後的結果。對轉置後的結果再次轉置就會回到原來的結果。

對錶df進行轉置,代碼以下所示。

對轉後的表再次進行轉置,代碼以下所示。

11、索引重塑

所謂的索引重塑就是將原來的索引進行從新構造。典型的DataFrame結構的表以下表所示。

上面這種表是典型的DataFrame結構,它用一個行索引和一個列索引來肯定一個惟一值,好比S1-C1惟一值爲1,S2-C3惟一值爲6。這種經過兩個位置肯定一個惟一值的方法不只能夠用上述這種表格型結構表示,並且能夠用一種樹形結構來表示,以下圖所示。

樹形結構其實就是在維持表格型行索引不變的前提下,把列索引也變成行索引,其實就是給表格型數據創建層次化索引。

咱們把數據從表格型數據轉換到樹形數據的過程叫重塑,這種操做在Excel中沒有,在Python用到的方法是stack ( ) ,示例代碼以下所示。

與stack ( ) 方法相對應的方法是unstack ( ) 方法,stack ( )方法是將表格型數據轉化爲樹形數據,而unstack ( )方法是將樹形數據轉爲表格型數據,示例代碼以下所示。

12、長寬錶轉換

長寬錶轉換就是將比較長(不少行)的錶轉換爲比較寬(不少列)的表,或者將比較寬的錶轉化爲比較長的表。

下表是一個寬表(有不少列)。

咱們要把這個寬錶轉化爲以下表所示的長表。

image

上面這種由不少列轉換爲不少行的過程,就是寬錶轉換爲長表的過程,這種轉換過程是有前提的,那就是須要有公共列。

一、寬錶轉換爲長表

寬錶轉化爲長表,在Excel中通常都用複製粘貼實現,咱們主要看看在Python中如何實現。Python中要實現這種轉換有兩種方法,一種是 stack ( ) 方法,另外一種是melt ( ) 方法。

(1)stack ( ) 方法實現

stack ( ) 在將表格型數據轉爲樹形數據時,是在保持行索引不變的前提下,將列索引也變成行索引。

這裏將寬錶轉化爲長表首先要在保持 Company 和 Name 不變的前提下,將Sale201三、Sale201四、Sale201五、Sale2016也變成行索引。因此,須要先將 Company和Nmae先設置成索引,而後調用 stack ( ) 方法,將列索引也轉換成行索引,最後利用 reset_index ( ) 方法進行索引重置,示例代碼以下所示。

(2)melt ( ) 方法實現

用 melt ( ) 方法實現上述功能,代碼以下所示。

melt 中的 id_vars 參數用於指明寬錶轉換到長表時保持不變的列, var_name 參數表示原來的列索引轉化爲「行索引」之後對應的列名, value_name 表示新索引對應的值的列名。

注意,這裏的「行索引」是有雙引號的,它並不是實際行索引,只是相似實際的行索引。

二、長錶轉換爲寬表

將長錶轉化爲寬表就是寬錶轉化爲長表的逆過程。經常使用的方法就是數據透視表,具體實現以下:

上面的實現過程是把Company和Name設置成行索引,Year設置成列索引,Sale爲值。

十3、apply ( ) 與applymap ( ) 函數

咱們在Python基礎知識部分講過一個Python的高級特性map ( ) 函數,map ( ) 函數是對一個序列中的全部元素執行相同的函數操做。

在DataFrame中與 map ( ) 函數相似的函數有兩個,一個是apply ( ) 函數,另外一個是applymap ( ) 函數。函數apply ( ) 和applymap ( ) 都須要與匿名函數lambda結合使用。

apply ( ) 函數主要用於對DataFrame中的某一column或row中的元素執行相同的函數操做。

applymap ( ) 函數用於對DataFrame中的每個元素執行相同的函數操做。

相關文章
相關標籤/搜索