相信你們在處理數據的時候常常會發現有一些數據的缺失,這個時候便會很頭大,由於有時候的缺失的數據是原本就沒有的,這些數據無論就行了,有的數據雖然沒有,可是也能夠根據一些數據推算出來這個數據是多少而後給它填上,可是有的數據缺失是隨機缺失的徹底不知道應該怎麼處理,因此呢今天我就帶你們瞭解一下數據中的缺失值以及如何對缺失值進行處理。python
1、讀取數據正則表達式
相信你們在使用python讀取數據的時候會出現這種報錯的狀況。
這種狀況是由於文件名中有中文,遇到這種狀況第一種方式就是講文件名改成英文,或者這樣處理能夠。
先使用open打開,而後賦值給變量,而後關閉掉文件,使用被賦值的變量就能夠了。dom
2、處理缺失值spa
一、什麼是缺失值對象
俗話說知己知彼,百戰百勝,在處理缺失值以前咱們首先要了解一下什麼是缺失值? 直觀上理解,缺失值表示的是「缺失的數據」。能夠思考一個問題:是什麼緣由形成的缺失值呢?其實有不少緣由,實際生活中可能因爲有的數據不全因此致使數據缺失,也有可能因爲誤操做致使數據缺失,又或者人爲地形成數據缺失,可是主要的仍是分爲機械緣由和人爲緣由。索引
機械緣由是因爲機械緣由致使的數據收集或保存的失敗形成的數據缺失,好比數據存儲的失敗,存儲器損壞,機械故障致使某段時間數據未能收集(對於定時數據採集而言)。rem
人爲緣由是因爲人的主觀失誤、歷史侷限或有意隱瞞形成的數據缺失,好比,在市場調查中被訪人拒絕透露相關問題的答案,或者回答的問題是無效的,數據錄入人員失誤漏錄了數據字符串
缺失值從缺失的分佈來說能夠分爲徹底隨機缺失,隨機缺失和徹底非隨機缺失。it
缺失值從缺失值的所屬屬性來說能夠分爲單值缺失,任意缺失和單調缺失。class
在Python中缺失值被認爲是None、np.nan、NaT的形式。
原理性的東西咱們就說這麼多,下面咱們進入代碼部門,首先咱們人爲的形成一些數據的缺失
而後咱們生成一列英雄們的生日的數據列
查看數據表的信息。
二、轉換數據列的類型
這個時候咱們經過info()方法發現生日列的類型是object的,須要將生日列的類型經過to_datetime()轉換爲日期型
三、掩碼提取空值
首先使用isnull()或者notnull()來查看是否缺失
Isnull()是將缺失值判斷爲True,非缺失值判斷爲False
Notnull()將缺失值判斷爲False,非缺失值判斷爲True
4.一、將不是地球的英雄提取出來
4.二、將1980年以後出生的英雄提取出來
4.三、將1988年1月1號以前出生的英雄提取出來
五、丟棄缺失值
既然在數據中有缺失值了,常見的一種處理辦法就是丟棄缺失值。使用 dropna 方法能夠丟棄缺失值。
user_info.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)
seriese使用dropna比較簡單,對於DataFrame 來講,能夠設置更多的參數。
axis 參數用於控制行或列,跟其餘不同的是,axis=0 (默認)表示操做行,axis=1 表示操做列。
how 參數可選的值爲 any(默認) 或者 all。any 表示一行/列有任意元素爲空時即丟棄,all 一行/列全部值都爲空時才丟棄。subset 參數表示刪除時只考慮的索引或列名。thresh參數的類型爲整數,它的做用是,好比 thresh=3,會在一行/列中至少有 3 個非空值時將其保留。
從結果能夠看出,身高列和城市列都存在空值,這樣就被刪除掉了。
從結果能夠看出,鋼鐵俠、索爾由於身高出現空值而被刪除這一行的數據,奇異博士由於城市出現空值而被刪除一行的數據,滅霸是年齡出現了空值,可是年齡這一列並未作爲刪除的條件因此沒有被刪除掉數據。
3、填充缺失值
除了能夠丟棄缺失值外,也能夠填充缺失值,最多見的是使用fillna完成填充。Fillna這個名字一看就是用來填充缺失值得嘛。
一、固定值填充
填充缺失值時,常見的一種方式是使用一個標量來填充。好比咱們能夠將缺失的年齡都填充爲0。
固然在身高列填充0顯然是不規範的,我們這裏只作演示使用,你們在實際的處理數據的時候仍是要跟數據結合起來在選擇填充的標量。
二、上下文填充
除了可使用標量來填充以外,還可使用前一個或後一個有效值來填充。設置參數method=’pad’或method=’ffill’可使用前一個有效值來填充。
設置參method='bfill'或method='backfill'可使用後一個有效值來填充。
除了經過fillna方法來填充缺失值外,還能夠經過interpolate方法來填充。默認狀況下使用線性差值,能夠是設置method參數來改變方式。
三、替換缺失值
如今你們想想,到底什麼纔是缺失值呢,不要覺得我前邊說過的那些None、np.nan、NaT這些是缺失值,這些在Pandas中被認爲是缺失值,可是呢,在咱們活生生的人眼中,某些異常值也會被當成缺失值來處理。
例如,在咱們的存儲的用戶信息中,假定咱們限定用戶都是青年,出現了年齡爲40的,咱們就能夠認爲這是一個異常值。
再好比,咱們都知道性別分爲男性(male)和女性(female),在記錄用戶性別的時候,對於未知的用戶性別都記爲了「unknown」,很明顯,咱們也能夠認爲「unknown」是缺失值。
除了這些,有時會也會出現一些空白的字符串,這些也能夠認爲是缺失值。對於上面的這一系列問題,咱們可使用replace方法來替換缺失值。
除了替換特定的值之外,咱們還可使用正則表達式來替換,如將空白字符串替換爲空值。
四、使用其餘對象填充
除了咱們本身手動丟棄、填充已經替換缺失值以外,咱們還可使用其餘的對象來填充。
例如咱們有兩個用戶年齡的series,其中一個由缺失值,另一個沒有,咱們能夠額將沒有缺失值的series的元素傳給有缺失值的。