如何一分鐘內(nèi)找出pandas DataFrame某列中的nan值
一分鐘內(nèi)找出pandas DataFrame某列中的nan值
例如
對格式為DataFrame的變量element,找出其中TEM列里所有的nan值
element=read_element(TRHCLO_data_path,end_trans,sta_info)

步驟一
element_right=element[~(np.isnan(element["TEM"]))] #(element["TEM"]).isna() element_nan=(element[np.isnan(element["TEM"])])
此時程序報錯:
ufunc ‘isnan’ not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ‘‘safe’’

步驟二
對查詢列(TEM列)的數(shù)據(jù)類型進(jìn)行一次標(biāo)準(zhǔn)處理即可
element["TEM"]=(element["TEM"]).astype(float) #對下面的np.isnan查詢很必要,否則會報格式錯誤 element_right=element[~(np.isnan(element["TEM"]))] element_nan=(element[np.isnan(element["TEM"])])
dataframe缺失值(NaN)處理
在進(jìn)行機(jī)器學(xué)習(xí)的特征工程時,常常需要根據(jù)選擇的機(jī)器學(xué)習(xí)算法,采用合適的數(shù)據(jù)預(yù)處理方式,特別是對于對于空值(NaN)的處理,常常使人感到困惑。
一般對于NaN,常常有兩種處理方式。
- 第一種——填補(bǔ)
- 第二種——不處理
當(dāng)你使用sklearn庫進(jìn)行機(jī)器學(xué)習(xí)訓(xùn)練時,一般對于缺失值要求較為嚴(yán)格,因此,需要進(jìn)行填補(bǔ),至于填補(bǔ)為何值,則需要根據(jù)業(yè)務(wù)需求進(jìn)行。
當(dāng)你使用lightgbm庫一類庫進(jìn)行機(jī)器學(xué)習(xí)訓(xùn)練時,一般不需要處理缺失值,因為這類算法,天然支持缺失值處理,它會將缺失值單獨分為一類。
本人認(rèn)為,數(shù)據(jù)的缺失,在實際中是存在一定的業(yè)務(wù)含義的,例如月收入的缺失,就反應(yīng)人對于自己收入的不自信,因此在風(fēng)控領(lǐng)域就存在更容易逾期現(xiàn)象。但此時若是進(jìn)行均值的缺失值填補(bǔ),則會使該業(yè)務(wù)含義消失,因此我覺得是不可取的。
數(shù)據(jù)的特征工程決定數(shù)據(jù)質(zhì)量,數(shù)據(jù)質(zhì)量決定模型效果上限,模型參數(shù)決定訓(xùn)練的模型能否逼近理論模型,特征工程的難易復(fù)雜程度決定模型最終上線的工作量。
(以上為本人的一點點見解)
判斷缺失值的函數(shù)有:np.isnan()/ pd.isna()/pd.isnull()。
- np.isnan():一般用于單個值,也可以用于Series或者DataFrame,但是這里存在一個坑,np.isnan()判斷datetime類型的Series或者DataFrame會報錯。
- 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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入理解Python中pywin32庫實現(xiàn)Windows自動化與系統(tǒng)交互
pywin32是一個讓?Python?能夠直接調(diào)用?Windows?API?和?COM?對象的擴(kuò)展庫,本文將帶大家從入門到精通,系統(tǒng)性地理解?pywin32?的核心功能、內(nèi)部機(jī)制、典型應(yīng)用場景和高級用法2025-10-10
利用python實現(xiàn)微信頭像加紅色數(shù)字功能
通過Python實現(xiàn)將你的 QQ 頭像(或者微博頭像)右上角加上紅色的數(shù)字,類似于微信未讀信息數(shù)量那種提示效果。下面通過本文給大家分享python實現(xiàn)微信頭像加紅色數(shù)字功能,感興趣的朋友一起看看吧2018-03-03
解決Python在導(dǎo)入文件時的FileNotFoundError問題
這篇文章主要介紹了解決Python在導(dǎo)入文件時的FileNotFoundError問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python3中函數(shù)參數(shù)傳遞方式實例詳解
這篇文章主要介紹了Python3中函數(shù)參數(shù)傳遞方式,結(jié)合實例形式較為詳細(xì)的分析了Python3中函數(shù)參數(shù)傳遞的常見操作技巧,需要的朋友可以參考下2019-05-05

