小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Pandas中的缺失值處理

 CDA數(shù)據(jù)分析師 2019-04-12

相信大家在處理數(shù)據(jù)的時(shí)候經(jīng)常會(huì)發(fā)現(xiàn)有一些數(shù)據(jù)的缺失,這個(gè)時(shí)候便會(huì)很頭大,因?yàn)橛袝r(shí)候的缺失的數(shù)據(jù)是本來(lái)就沒(méi)有的,這些數(shù)據(jù)不管就好了,有的數(shù)據(jù)雖然沒(méi)有,但是也可以根據(jù)一些數(shù)據(jù)推算出來(lái)這個(gè)數(shù)據(jù)是多少然后給它填上,但是有的數(shù)據(jù)缺失是隨機(jī)缺失的完全不知道應(yīng)該怎么處理,所以呢今天我就帶大家了解一下數(shù)據(jù)中的缺失值以及如何對(duì)缺失值進(jìn)行處理。

  1. 讀取數(shù)據(jù)

相信大家在使用python讀取數(shù)據(jù)的時(shí)候會(huì)出現(xiàn)這種報(bào)錯(cuò)的情況。

這種情況是因?yàn)槲募杏兄形?遇到這種情況第一種方式就是講文件名改為英文,或者這樣處理可以。

先使用open打開(kāi),然后賦值給變量,然后關(guān)閉掉文件,使用被賦值的變量就可以了。

二、處理缺失值

1、什么是缺失值

俗話說(shuō)知己知彼,百戰(zhàn)百勝,在處理缺失值之前我們首先要了解一下什么是缺失值? 直觀上理解,缺失值表示的是“缺失的數(shù)據(jù)”??梢运伎家粋€(gè)問(wèn)題:是什么原因造成的缺失值呢?其實(shí)有很多原因,實(shí)際生活中可能由于有的數(shù)據(jù)不全所以導(dǎo)致數(shù)據(jù)缺失,也有可能由于誤操作導(dǎo)致數(shù)據(jù)缺失,又或者人為地造成數(shù)據(jù)缺失,但是主要的還是分為機(jī)械原因和人為原因。

機(jī)械原因是由于機(jī)械原因?qū)е碌臄?shù)據(jù)收集或保存的失敗造成的數(shù)據(jù)缺失,比如數(shù)據(jù)存儲(chǔ)的失敗,存儲(chǔ)器損壞,機(jī)械故障導(dǎo)致某段時(shí)間數(shù)據(jù)未能收集(對(duì)于定時(shí)數(shù)據(jù)采集而言)。

人為原因是由于人的主觀失誤、歷史局限或有意隱瞞造成的數(shù)據(jù)缺失,比如,在市場(chǎng)調(diào)查中被訪人拒絕透露相關(guān)問(wèn)題的答案,或者回答的問(wèn)題是無(wú)效的,數(shù)據(jù)錄入人員失誤漏錄了數(shù)據(jù)

缺失值從缺失的分布來(lái)講可以分為完全隨機(jī)缺失,隨機(jī)缺失和完全非隨機(jī)缺失。

  • 完全隨機(jī)缺失(missing completely at random,MCAR)指的是數(shù)據(jù)的缺失是隨機(jī)的,數(shù)據(jù)的缺失不依賴于任何不完全變量或完全變量。

  • 隨機(jī)缺失(missing at random,MAR)指的是數(shù)據(jù)的缺失不是完全隨機(jī)的,即該類(lèi)數(shù)據(jù)的缺失依賴于其他完全變量。

  • 完全非隨機(jī)缺失(missing not at random,MNAR)指的是數(shù)據(jù)的缺失依賴于不完全變量自身。

缺失值從缺失值的所屬屬性來(lái)講可以分為單值缺失,任意缺失和單調(diào)缺失。

  • 單值缺失:如果所有的缺失值都是同一屬性,那么這種缺失成為單值缺失。

  • 任意缺失:如果缺失值屬于不同的屬性,稱(chēng)為任意缺失。

  • 單調(diào)缺失:對(duì)于時(shí)間序列類(lèi)的數(shù)據(jù),可能存在隨著時(shí)間的缺失,這種缺失稱(chēng)為單調(diào)缺失

在Python中缺失值被認(rèn)為是None、np.nan、NaT的形式。

原理性的東西我們就說(shuō)這么多,下面我們進(jìn)入代碼部門(mén),首先我們?nèi)藶榈脑斐梢恍?shù)據(jù)的缺失

然后我們生成一列英雄們的生日的數(shù)據(jù)列

查看數(shù)據(jù)表的信息。

2、轉(zhuǎn)換數(shù)據(jù)列的類(lèi)型

這個(gè)時(shí)候我們通過(guò)info()方法發(fā)現(xiàn)生日列的類(lèi)型是object的,需要將生日列的類(lèi)型通過(guò)to_datetime()轉(zhuǎn)換為日期型

3、掩碼提取空值

首先使用isnull()或者notnull()來(lái)查看是否缺失

Isnull()是將缺失值判斷為T(mén)rue,非缺失值判斷為False

Notnull()將缺失值判斷為False,非缺失值判斷為T(mén)rue

  • 將有空值的行提取出來(lái)

  • 反之將非空行的數(shù)據(jù)提取出來(lái)

  1. 掩碼的其他用處

4.1、將不是地球的英雄提取出來(lái)

  • 首先將那個(gè)星球的列名改為星球

  • 然后將外星球的英雄提取出來(lái)。

4.2、將1980年之后出生的英雄提取出來(lái)

4.3、將1988年1月1號(hào)之前出生的英雄提取出來(lái)

5、丟棄缺失值

既然在數(shù)據(jù)中有缺失值了,常見(jiàn)的一種處理辦法就是丟棄缺失值。使用 dropna 方法可以丟棄缺失值。

user_info.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)

seriese使用dropna比較簡(jiǎn)單,對(duì)于DataFrame 來(lái)說(shuō),可以設(shè)置更多的參數(shù)。

axis 參數(shù)用于控制行或列,跟其他不一樣的是,axis=0 (默認(rèn))表示操作行,axis=1 表示操作列。

how 參數(shù)可選的值為 any(默認(rèn)) 或者 all。any 表示一行/列有任意元素為空時(shí)即丟棄,all 一行/列所有值都為空時(shí)才丟棄。subset 參數(shù)表示刪除時(shí)只考慮的索引或列名。thresh參數(shù)的類(lèi)型為整數(shù),它的作用是,比如 thresh=3,會(huì)在一行/列中至少有 3 個(gè)非空值時(shí)將其保留。

  • 一列數(shù)據(jù)中只要存在一個(gè)空值就刪除掉

從結(jié)果可以看出,身高列和城市列都存在空值,這樣就被刪除掉了。

  • 一行數(shù)據(jù)中只要城市和性別出現(xiàn)空值就刪除掉

從結(jié)果可以看出,鋼鐵俠、索爾因?yàn)樯砀叱霈F(xiàn)空值而被刪除這一行的數(shù)據(jù),奇異博士因?yàn)槌鞘谐霈F(xiàn)空值而被刪除一行的數(shù)據(jù),滅霸是年齡出現(xiàn)了空值,但是年齡這一列并未做為刪除的條件所以沒(méi)有被刪除掉數(shù)據(jù)。

三、填充缺失值

除了可以丟棄缺失值外,也可以填充缺失值,最常見(jiàn)的是使用fillna完成填充。Fillna這個(gè)名字一看就是用來(lái)填充缺失值得嘛。

1、固定值填充

填充缺失值時(shí),常見(jiàn)的一種方式是使用一個(gè)標(biāo)量來(lái)填充。比如我們可以將缺失的年齡都填充為0。

  • 將英雄們的身高填充為0

當(dāng)然在身高列填充0顯然是不規(guī)范的,咱們這里只做演示使用,大家在實(shí)際的處理數(shù)據(jù)的時(shí)候還是要跟數(shù)據(jù)結(jié)合起來(lái)在選擇填充的標(biāo)量。

2、上下文填充

除了可以使用標(biāo)量來(lái)填充之外,還可以使用前一個(gè)或后一個(gè)有效值來(lái)填充。設(shè)置參數(shù)method=’pad’或method=’ffill’可以使用前一個(gè)有效值來(lái)填充。

設(shè)置參method='bfill'或method='backfill'可以使用后一個(gè)有效值來(lái)填充。

除了通過(guò)fillna方法來(lái)填充缺失值外,還可以通過(guò)interpolate方法來(lái)填充。默認(rèn)情況下使用線性差值,可以是設(shè)置method參數(shù)來(lái)改變方式。

3、替換缺失值

現(xiàn)在大家想一想,到底什么才是缺失值呢,不要以為我前邊說(shuō)過(guò)的那些None、np.nan、NaT這些是缺失值,這些在Pandas中被認(rèn)為是缺失值,但是呢,在我們活生生的人眼中,某些異常值也會(huì)被當(dāng)成缺失值來(lái)處理。

例如,在我們的存儲(chǔ)的用戶信息中,假定我們限定用戶都是青年,出現(xiàn)了年齡為40的,我們就可以認(rèn)為這是一個(gè)異常值。

再比如,我們都知道性別分為男性(male)和女性(female),在記錄用戶性別的時(shí)候,對(duì)于未知的用戶性別都記為了“unknown”,很明顯,我們也可以認(rèn)為“unknown”是缺失值。

除了這些,有時(shí)會(huì)也會(huì)出現(xiàn)一些空白的字符串,這些也可以認(rèn)為是缺失值。對(duì)于上面的這一系列問(wèn)題,我們可以使用replace方法來(lái)替換缺失值。

  • 假設(shè)我們現(xiàn)在是一個(gè)地球流浪者收容組織,不允許外星人的存在,那么英雄現(xiàn)在已經(jīng)存在了,打又打不過(guò),但是又不能違反組織的規(guī)定,那怎么辦呢,那就把這些惹不起的外星人定義成黑戶,也就是空值,不知道他們的星球?qū)傩?睜一只眼閉一只眼。

  • 這個(gè)時(shí)候外星這個(gè)屬性去掉了,但是阿斯加德和泰坦星明顯不是一個(gè)地球的城市,所以我們也要將城市屬性換成NaN,但是分開(kāi)設(shè)置又太麻煩了,我們就可以直接將城市作為一個(gè)映射的字典給替換掉。

  • 處理完外星人的事了之后現(xiàn)在返回來(lái)處理咱們地球人的事,這個(gè)時(shí)候發(fā)現(xiàn)黑寡婦的生日是1929年,明顯是一個(gè)假的出生日期,既然生日是假的年齡應(yīng)該也是假的,所以我們需要將年齡更改為unknown,然后在定義為缺失值。

除了替換特定的值以外,我們還可以使用正則表達(dá)式來(lái)替換,如將空白字符串替換為空值。

  • 將中年替換為中老年

4、使用其他對(duì)象填充

除了我們自己手動(dòng)丟棄、填充已經(jīng)替換缺失值之外,我們還可以使用其他的對(duì)象來(lái)填充。

例如我們有兩個(gè)用戶年齡的series,其中一個(gè)由缺失值,另外一個(gè)沒(méi)有,我們可以額將沒(méi)有缺失值的series的元素傳給有缺失值的。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多