pandas如何將dataframe中的NaN替換成None
pandas將dataframe的NaN替換成None
df = df.where(df.notnull(), None)
dataframe缺失值(NaN)處理
在進(jìn)行機(jī)器學(xué)習(xí)的特征工程時(shí),常常需要根據(jù)選擇的機(jī)器學(xué)習(xí)算法,采用合適的數(shù)據(jù)預(yù)處理方式,特別是對于對于空值(NaN)的處理,常常使人感到困惑。
一般對于NaN,常常有兩種處理方式:
- 第一種——填補(bǔ)。
- 第二種——不處理。
當(dāng)你使用sklearn庫進(jìn)行機(jī)器學(xué)習(xí)訓(xùn)練時(shí),一般對于缺失值要求較為嚴(yán)格,因此,需要進(jìn)行填補(bǔ),至于填補(bǔ)為何值,則需要根據(jù)業(yè)務(wù)需求進(jìn)行。
當(dāng)你使用lightgbm庫一類庫進(jìn)行機(jī)器學(xué)習(xí)訓(xùn)練時(shí),一般不需要處理缺失值,因?yàn)檫@類算法,天然支持缺失值處理,它會將缺失值單獨(dú)分為一類。
本人認(rèn)為,數(shù)據(jù)的缺失,在實(shí)際中是存在一定的業(yè)務(wù)含義的,例如月收入的缺失,就反應(yīng)人對于自己收入的不自信,因此在風(fēng)控領(lǐng)域就存在更容易逾期現(xiàn)象。但此時(shí)若是進(jìn)行均值的缺失值填補(bǔ),則會使該業(yè)務(wù)含義消失,因此我覺得是不可取的。
數(shù)據(jù)的特征工程決定數(shù)據(jù)質(zhì)量,數(shù)據(jù)質(zhì)量決定模型效果上限,模型參數(shù)決定訓(xùn)練的模型能否逼近理論模型,特征工程的難易復(fù)雜程度決定模型最終上線的工作量。
(以上為本人的一點(diǎn)點(diǎn)見解)
判斷缺失值的函數(shù)有:np.isnan()/ pd.isna()/pd.isnull()。
np.isnan():一般用于單個(gè)值,也可以用于Series或者DataFrame,但是這里存在一個(gè)坑,np.isnan()判斷datetime類型的Series或者DataFrame會報(bào)錯(cuò)。pd.isna()和pd.isnull():用的比較多,一般推薦使用pd.isna()
s1 = pd.Series([1,2,3,np.nan]) np.isnan(s1) >>> 0 False 1 False 2 False 3 True dtype: bool pd.isna(s1) >>> 0 False 1 False 2 False 3 True dtype: bool pd.isnull(s1) >>> 0 False 1 False 2 False 3 True dtype: bool
除了以上的方法之外,還有一種較為方便和萬能的方法來判斷缺失值,取出非缺失值進(jìn)行處理(本人一般也采用這種方法)。
通過對np.nan==np.nan發(fā)現(xiàn),np.nan是不會等于np.nan,因此我們可以通過以下方式取出非缺失值。
np.nan==np.nan >>> False
s1 = pd.Series([1,2,3,np.nan]) s1==s1 >>> 0 True 1 True 2 True 3 False dtype: bool #獲取非缺失值 s1[s1==s1] >>> 0 1.0 1 2.0 2 3.0 dtype: float64 #獲取非缺失值的數(shù)量 len(s1[s1==s1]) >>>3 #對缺失值進(jìn)行填補(bǔ)(除了fillna外的方式) s1[~(s1==s1)]=0 s1 >>> 0 1.0 1 2.0 2 3.0 3 0.0 dtype: float64
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python循環(huán)控制之break和continue流程控制語句
這篇文章主要介紹了python循環(huán)控制之break流程控制語句,Python中提供了兩個(gè)關(guān)鍵字用來控制循環(huán)語句,分別是break和continue,本文都有介紹,需要的朋友可以參考一下2022-03-03
python創(chuàng)建與遍歷List二維列表的方法
這篇文章主要介紹了python創(chuàng)建與遍歷List二維列表的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08
Python 字典與字符串的互轉(zhuǎn)實(shí)例
下面小編就為大家?guī)硪黄狿ython 字典與字符串的互轉(zhuǎn)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
python實(shí)現(xiàn)MQTT客戶端通信的示例代碼
本文主要介紹了python實(shí)現(xiàn)MQTT客戶端通信的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12
Python讀取大型數(shù)據(jù)文件的6種方式匯總
在 Python 中,我們可以使用多種方法讀取大型數(shù)據(jù)文件,本文主要為大家介紹6個(gè)常用的Python讀取大型數(shù)據(jù)文件的方法,希望對大家有所幫助2023-05-05
Python使用raise報(bào)錯(cuò)拋出異常顯示Unicode碼的解決方法
在 Python 開發(fā)中,我們經(jīng)常使用 raise 拋出異常來處理錯(cuò)誤情況,但有時(shí)候,異常信息中的中文或其他非 ASCII 字符會被顯示為 Unicode 轉(zhuǎn)義序列,下面我們就來看看如何解決吧2026-04-04
python處理csv數(shù)據(jù)動態(tài)顯示曲線實(shí)例代碼
這篇文章主要介紹了python處理csv數(shù)據(jù)動態(tài)顯示曲線實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01

