在數(shù)據(jù)分析和機器學(xué)習(xí)中,缺失值是一種常見的現(xiàn)象。在實際數(shù)據(jù)集中,某些變量的某些條目可能沒有可用的值。處理缺失值是一個重要的數(shù)據(jù)預(yù)處理步驟。在本文中,我們將介紹如何在 Pandas 中處理缺失值。
我們將探討以下內(nèi)容:
-
什么是缺失值;
-
如何在 Pandas 中識別缺失值;
-
處理缺失值的常見方法;
-
Pandas 中處理缺失值的代碼示例;
- 我們還提供了一個隨機生成的包含缺失值的較大數(shù)據(jù)集,可以使用這個數(shù)據(jù)集來練習(xí)和嘗試這些方法。
===
01.什么是缺失值
缺失值是指數(shù)據(jù)集中某些變量的某些條目缺少值。這些條目可以是空值、NaN(不是數(shù)字)或其他標記。缺失值可能是由于數(shù)據(jù)輸入錯誤、數(shù)據(jù)丟失或其他原因?qū)е碌?。在分析?shù)據(jù)集時,缺失值可能會影響結(jié)果,因此需要對其進行處理。在 Pandas 中,缺失數(shù)據(jù)由兩個值表示:None:None 通常用于 Python 代碼中的缺失數(shù)據(jù),NaN :NaN(Not a Number 的首字母縮寫詞)。
02.如何在 Pandas 中識別缺失值
在 Pandas 中,我們可以使用 isnull() 或 notnull() 函數(shù)來識別缺失值。不同之處在于,isnull()函數(shù)發(fā)現(xiàn)數(shù)據(jù)中有空值或缺失值的時候返回True,notnull()返回的是False。 這些函數(shù)返回一個布爾數(shù)組,該數(shù)組指示每個元素是否為空值。例如,假設(shè)我們有一個數(shù)據(jù)框 df,我們可以使用以下代碼檢查缺失值。
import pandas as pd # 創(chuàng)建一個包含缺失值的數(shù)據(jù)框 df = pd.DataFrame({‘A’: [1, 2, None, 4, None], ‘B’: [5, None, 7, 8, None]}) # 檢查數(shù)據(jù)框中的缺失值 print(df.isnull()) df
輸出結(jié)果為,如下在第3行第1列和第2行第2列存在缺失值。
A B 0 False False 1 False True 2 True False 3 False False 4 True True Out\[2\]: A B 0 1.0 5.0 1 2.0 NaN 2 NaN 7.0 3 4.0 8.0
上述代碼將檢查 df 數(shù)據(jù)框中的缺失值,并返回一個布爾數(shù)組,該數(shù)組指示每個元素是否為空值。True 表示該元素是一個缺失值。
03.處理缺失值的常見方法
在處理缺失值時,我們有許多方法可供選擇。下面是一些常見的方法,函數(shù)形式:dropna(axis=0, how=‘a(chǎn)ny’, thresh=None, subset=None, inplace=False)
3.1
刪除缺失值
刪除缺失值是處理缺失值的最簡單方法之一。我們可以使用 dropna() 函數(shù)從數(shù)據(jù)框中刪除包含缺失值的行或列。例如,如果我們希望刪除包含任何缺失值的行,我們可以使用以下代碼,其中how默認參數(shù)為’any’。
# 刪除包含任何缺失值的行 df.dropna()
刪除時,有一個how參數(shù)介紹如下:
**how:**篩選方式。'any’,表示該行/列只要有一個以上的空值,就刪除該行/列;'all’,表示該行/列全部都為空值,就刪除該行/列。
我們可以使用以下代碼,其中參數(shù)all表示該行/列全部都為空值,就刪除該行/列。
# 刪除的行和列必須都為空值 df.dropna(how=‘a(chǎn)ll’)
如下所示,第一行代碼將所有存在空值的行刪除,而第二行代碼只是將最后一行全空的值刪除。
如果我們希望只要出現(xiàn)缺失值,就刪除所在的行,我們可以使用以下代碼,設(shè)置參數(shù)為’any’。
# 只要出現(xiàn)缺失值,就刪除 df.dropna(how=‘a(chǎn)ny’)
如果我們希望刪除包含缺失值的列,我們可以使用以下代碼:
# 刪除包含缺失值的列 df.dropna(axis=1)
如下所示,其中df是原始的值,運行結(jié)果如下可對照結(jié)果進行分析。
3.2
替換缺失值
替換缺失值是處理缺失值的另一種常見方法。我們可以使用 fillna() 函數(shù)將缺失值替換為其他值。例如,如果我們希望將缺失值替換為 0,我們可以使用以下代碼:
# 將缺失值替換為 0 df.fillna(0)
我們還可以使用其他值來替換缺失值。例如,我們可以使用以下代碼將缺失值替換為每列的平均值:
# 將缺失值替換為每列的平均值 df.fillna(df.mean())
兩處代碼的運行結(jié)果如下所示,分別對應(yīng)原始值、缺失值替換。
3.3
插值缺失值
插值是一種更高級的缺失值處理方法。它可以使用現(xiàn)有數(shù)據(jù)來推斷缺失值。我們可以使用 interpolate() 函數(shù)在 Pandas 中進行插值。例如,我們可以使用以下代碼在每列上進行線性插值:
# 線性插值 df.fillna(df.interpolate())
04.Pandas 中處理缺失值的完整代碼示例
下面是完整的在 Pandas 中處理缺失值的代碼示例:
import pandas as pd # 創(chuàng)建一個包含缺失值的數(shù)據(jù)框 df = pd.DataFrame({'A': \[1, 2, None, 4\], 'B': \[5, None, 7, 8\]}) # 檢查數(shù)據(jù)框中的缺失值 print(df.isnull()) # 刪除包含任何缺失值的行 print(df.dropna()) # 刪除整行都是缺失值的行 print(df.dropna(how='all')) # 刪除包含任何缺失值的行 df.dropna(how='any') # 刪除包含缺失值的列 print(df.dropna(axis=1)) # 將缺失值替換為 0 print(df.fillna(0)) # 將缺失值替換為每列的平均值 print(df.fillna(df.mean())) # 線性插值 print(df.interpolate()) print(df.fillna(df.interpolate()))
如上所示,我們先介紹了如何在 Pandas 中處理缺失值。我們討論了如何識別缺失值,并介紹了處理缺失值的常見方法。我們還提供了一些代碼示例,以便您可以在自己的項目中使用。處理缺失值是數(shù)據(jù)預(yù)處理的重要步驟,等下我們再介紹一些高級的缺失值處理方法。
05.高級缺失值處理方法
除了前面提到的基本缺失值處理方法,還有一些高級缺失值處理方法,可以進一步提高數(shù)據(jù)處理的精度。
5.1
多重插補
多重插補是一種使用現(xiàn)有數(shù)據(jù)集中其他相關(guān)變量的信息來推斷缺失值的方法。在 Pandas 中,我們可以使用 fancyimpute 庫來執(zhí)行多重插補。以下是一個示例,結(jié)果也如下所示。
from fancyimpute import IterativeImputer # 創(chuàng)建一個包含缺失值的數(shù)據(jù)框 df = pd.DataFrame({‘A’: [1, 2, None, 4,None], ‘B’: [5, None, 7, 8, None]}) # 使用多重插補 imputer = IterativeImputer() imputed_df = imputer.fit_transform(df) imputed_df
5.2
高級回歸模型
對于更復(fù)雜的數(shù)據(jù)集,使用高級回歸模型可以進一步提高缺失值處理的精度。例如,可以使用 XGBoost 或 LightGBM 等模型來處理缺失值。以下是一個使用 LightGBM 處理缺失值的示例:
import lightgbm as lgb # 創(chuàng)建一個包含缺失值的數(shù)據(jù)框 df = pd.DataFrame({'A': \[1, 2, None, 4,None\], 'B': \[5, None, 7, 8, None\]}) # 定義 LightGBM 模型 params = { 'objective': 'regression', 'metric': 'mse', 'num\_leaves': 5, 'learning\_rate': 0.05, 'feature\_fraction': 0.5 } # 使用 LightGBM 處理缺失值 dtrain = lgb.Dataset(df.drop('A', axis=1), label=df\['A'\].dropna()) gbm = lgb.train(params, dtrain) df\['A'\] = gbm.predict(df.drop('A', axis=1))
當然這個代碼我們還在調(diào)試中呀,可以自己復(fù)制運行下~只有自己寫了才會更加熟悉代碼呀。
結(jié)論
在數(shù)據(jù)處理中,處理缺失值是非常重要的。在 Pandas 中,我們可以使用多種方法來處理缺失值,包括刪除包含缺失值的行或列、替換缺失值和插值缺失值等基本方法。此外,我們還可以使用多重插補和高級回歸模型等高級方法來提高缺失值處理的精度。希望本文能夠幫助更好地處理缺失值,提高數(shù)據(jù)處理的效率和精度。
題外話
感興趣的小伙伴,贈送全套Python學(xué)習(xí)資料,包含面試題、簡歷資料等具體看下方。
??CSDN大禮包??:全網(wǎng)最全《Python學(xué)習(xí)資料》免費贈送??!(安全鏈接,放心點擊)文章來源:http://www.zghlxwxcb.cn/news/detail-774982.html
一、Python所有方向的學(xué)習(xí)路線
Python所有方向的技術(shù)點做的整理,形成各個領(lǐng)域的知識點匯總,它的用處就在于,你可以按照下面的知識點去找對應(yīng)的學(xué)習(xí)資源,保證自己學(xué)得較為全面。
二、Python必備開發(fā)工具
工具都幫大家整理好了,安裝就可直接上手!
三、最新Python學(xué)習(xí)筆記
當我學(xué)到一定基礎(chǔ),有自己的理解能力的時候,會去閱讀一些前輩整理的書籍或者手寫的筆記資料,這些筆記詳細記載了他們對一些技術(shù)點的理解,這些理解是比較獨到,可以學(xué)到不一樣的思路。
四、Python視頻合集
觀看全面零基礎(chǔ)學(xué)習(xí)視頻,看視頻學(xué)習(xí)是最快捷也是最有效果的方式,跟著視頻中老師的思路,從基礎(chǔ)到深入,還是很容易入門的。
五、實戰(zhàn)案例
紙上得來終覺淺,要學(xué)會跟著視頻一起敲,要動手實操,才能將自己的所學(xué)運用到實際當中去,這時候可以搞點實戰(zhàn)案例來學(xué)習(xí)。
六、面試寶典
簡歷模板
??CSDN大禮包??:全網(wǎng)最全《Python學(xué)習(xí)資料》免費贈送??!(安全鏈接,放心點擊)
若有侵權(quán),請聯(lián)系刪除文章來源地址http://www.zghlxwxcb.cn/news/detail-774982.html
到了這里,關(guān)于【數(shù)據(jù)分析】Python:處理缺失值的常見方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!