pandas處理缺失值的10種策略
一、引言
在數(shù)據(jù)分析的世界里,數(shù)據(jù)清洗是一項(xiàng)至關(guān)重要的前期工作。它猶如給食材去皮、洗凈、切片,讓它們成為一道道美味佳肴的原材料。對(duì)于Python初學(xué)者來說,掌握如何使用強(qiáng)大的Pandas庫(kù)處理數(shù)據(jù)中的缺失值是邁向數(shù)據(jù)清洗高手的第一步。本文將帶領(lǐng)您探索使用Pandas處理缺失值的10種策略,讓您在實(shí)戰(zhàn)中游刃有余。
二、準(zhǔn)備工作:導(dǎo)入Pandas庫(kù)與加載示例數(shù)據(jù)集
首先,確保已經(jīng)安裝了Pandas庫(kù),可通過以下命令進(jìn)行安裝:
pip install pandas
然后,我們創(chuàng)建一個(gè)簡(jiǎn)單的示例數(shù)據(jù)集example_data.csv,其中包含一些故意引入的缺失值(用NaN表示),以方便演示各種處理策略。以下代碼導(dǎo)入Pandas庫(kù)并加載數(shù)據(jù)集:
import pandas as pd
# 加載示例數(shù)據(jù)集
df = pd.read_csv("example_data.csv")
print(df)
輸出結(jié)果類似如下:
A B C D
0 1 2.0 NaN foo
1 2 NaN 7.0 bar
2 3 4.0 5.0 baz
3 4 NaN 6.0 qux
4 5 6.0 NaN quux
接下來,我們將逐一介紹并演示10種處理缺失值的策略。
三、策略1:直接刪除含有缺失值的行
有時(shí),當(dāng)數(shù)據(jù)集中存在大量缺失值,且對(duì)分析影響較小時(shí),可以選擇直接刪除含有缺失值的行。Pandas的dropna()方法可以輕松實(shí)現(xiàn)這一操作:
# 刪除含有缺失值的行 df_cleaned = df.dropna() print(df_cleaned)
注意:刪除數(shù)據(jù)需謹(jǐn)慎,確保缺失值的分布不會(huì)嚴(yán)重影響分析結(jié)果。
四、策略2:刪除含有缺失值的列
如果某一列的缺失值過多,可能對(duì)該列的分析價(jià)值產(chǎn)生較大影響,這時(shí)可以考慮刪除整列。只需將dropna()方法的axis參數(shù)設(shè)置為1(代表列):
# 刪除含有缺失值的列 df_cleaned = df.dropna(axis=1) print(df_cleaned)
五、策略3:填充缺失值(替換為固定值)
若希望將所有缺失值替換為某個(gè)固定的值(如0、-1或特定字符串),使用fillna()方法即可:
# 將所有缺失值替換為0 df_filled = df.fillna(0) print(df_filled)
六、策略4:基于前一個(gè)非空值進(jìn)行向前填充
對(duì)于時(shí)間序列數(shù)據(jù)或其他有序數(shù)據(jù),有時(shí)會(huì)采用“前一個(gè)非空值”來填充缺失值。只需將fillna()方法的method參數(shù)設(shè)為ffill(forward fill):
# 基于前一個(gè)非空值進(jìn)行向前填充 df_filled = df.fillna(method='ffill') print(df_filled)
七、策略5:基于后一個(gè)非空值進(jìn)行向后填充
與向前填充相反,向后填充(backfill)使用的是“后一個(gè)非空值”。只需將fillna()方法的method參數(shù)設(shè)為bfill:
# 基于后一個(gè)非空值進(jìn)行向后填充 df_filled = df.fillna(method='bfill') print(df_filled)
八、策略6:基于平均值、中位數(shù)或眾數(shù)填充缺失值
對(duì)于數(shù)值型數(shù)據(jù),可以計(jì)算列的平均值、中位數(shù)或眾數(shù),然后用這些統(tǒng)計(jì)量填充缺失值。分為兩步:
- 計(jì)算統(tǒng)計(jì)量:
mean_A = df['A'].mean() median_B = df['B'].median() mode_C = df['C'].mode()[0]
- 使用
fillna()方法進(jìn)行填充:
df_filled_A = df['A'].fillna(mean_A) df_filled_B = df['B'].fillna(median_B) df_filled_C = df['C'].fillna(mode_C)
九、策略7:使用插值法填充缺失值
對(duì)于連續(xù)的數(shù)值型數(shù)據(jù),可以使用插值法進(jìn)行填充。Pandas支持線性插值和時(shí)間序列插值:
- 線性插值:使用
interpolate()方法,無需額外參數(shù):
df_interpolated = df.interpolate() print(df_interpolated)
- 時(shí)間序列插值:假設(shè)數(shù)據(jù)集有時(shí)間戳列(如
datetime),則可使用method='time'參數(shù):
df['datetime'] = pd.to_datetime(df['datetime']) # 轉(zhuǎn)換為datetime類型
df_interpolated = df.set_index('datetime').interpolate(method='time').reset_index()
print(df_interpolated)
十、策略8:使用特定函數(shù)填充缺失值
如果您想根據(jù)數(shù)據(jù)特點(diǎn)自定義填充規(guī)則,可以編寫一個(gè)函數(shù),然后通過applymap()方法應(yīng)用到整個(gè)數(shù)據(jù)框:
def custom_fillna(x):
if isinstance(x, float) and pd.isnull(x):
return 0 # 對(duì)浮點(diǎn)數(shù)缺失值填充0
else:
return x # 其他情況保持原樣
df_custom_filled = df.applymap(custom_fillna)
print(df_custom_filled)
十一、策略9:利用機(jī)器學(xué)習(xí)模型預(yù)測(cè)缺失值
對(duì)于復(fù)雜的數(shù)據(jù)集,可以訓(xùn)練一個(gè)簡(jiǎn)單的機(jī)器學(xué)習(xí)模型(如線性回歸)來預(yù)測(cè)缺失值。以下是一個(gè)簡(jiǎn)化的示例:
from sklearn.linear_model import LinearRegression # 假設(shè)D列有缺失值,用A、B、C列作為特征預(yù)測(cè)D列 X = df.dropna(subset=['D'])[['A', 'B', 'C']] y = df.dropna(subset=['D'])['D'] model = LinearRegression().fit(X, y) # 預(yù)測(cè)并填充缺失值 df['D_pred'] = model.predict(df[['A', 'B', 'C']]) df['D_filled'] = df['D'].fillna(df['D_pred']) print(df)
十二、策略10:多重填充策略的組合運(yùn)用
實(shí)際工作中,可能需要結(jié)合多種策略靈活應(yīng)對(duì)不同情況。例如,先用眾數(shù)填充類別變量,再用線性插值填充數(shù)值變量:
df_filled_categories = df.fillna(df.mode().iloc[0]) df_filled_numerics = df_filled_categories.interpolate() print(df_filled_numerics)
十三、結(jié)論與實(shí)踐建議
處理數(shù)據(jù)中的缺失值沒有絕對(duì)的“最佳實(shí)踐”,應(yīng)根據(jù)數(shù)據(jù)特性和分析目標(biāo)靈活選擇合適的方法。理解并熟練運(yùn)用Pandas提供的工具,結(jié)合實(shí)際情況創(chuàng)新組合策略,將使你在數(shù)據(jù)清洗的道路上更加自信從容。
到此這篇關(guān)于pandas處理缺失值的10種策略的文章就介紹到這了,更多相關(guān)pandas 缺失值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)在某個(gè)數(shù)組中查找一個(gè)值的算法示例
今天小編就為大家分享一篇Python實(shí)現(xiàn)在某個(gè)數(shù)組中查找一個(gè)值的算法示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
python 利用pywifi模塊實(shí)現(xiàn)連接網(wǎng)絡(luò)破解wifi密碼實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)
這篇文章主要介紹了python 利用pywifi模塊實(shí)現(xiàn)連接網(wǎng)絡(luò)破解wifi密碼實(shí)時(shí)監(jiān)控網(wǎng)絡(luò),需要的朋友可以參考下2019-09-09
使用Python實(shí)現(xiàn)實(shí)時(shí)監(jiān)控CPU溫度
CPU溫度是衡量系統(tǒng)健康狀況的重要指標(biāo)之一,過高的CPU溫度可能導(dǎo)致系統(tǒng)不穩(wěn)定,下面我們就來看看如何使用Python實(shí)現(xiàn)實(shí)時(shí)監(jiān)控CPU溫度吧2025-12-12
使用Python實(shí)現(xiàn)自動(dòng)查找并高亮Word文檔中的文本
在處理 Word 文檔時(shí),很多用戶經(jīng)常需要查找并高亮特定文本,本文將演示如何使用Python高亮首個(gè)匹配的文本和高亮文檔中所有匹配的文本,感興趣的小伙伴可以了解下2026-01-01
Python實(shí)現(xiàn)Excel做表自動(dòng)化的最全方法合集
Microsoft?Excel?是一款強(qiáng)大的辦公工具,廣泛用于數(shù)據(jù)分析、報(bào)告制作、預(yù)算管理等各種任務(wù),本文將深入探討如何使用?Python?進(jìn)行?Excel?表格的自動(dòng)化,需要的可以參考下2024-02-02
Python中dictionary items()系列函數(shù)的用法實(shí)例
這篇文章主要介紹了Python中dictionary items()系列函數(shù)的用法,很實(shí)用的函數(shù),需要的朋友可以參考下2014-08-08
python中如何正確使用正則表達(dá)式的詳細(xì)模式(Verbose mode expression)
許多程序設(shè)計(jì)語(yǔ)言都支持利用正則表達(dá)式進(jìn)行字符串操作,python自然也不例外,下面這篇文章主要給大家介紹了關(guān)于在python中如何正確使用正則表達(dá)式的詳細(xì)模式(Verbose mode expression)的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-11-11
時(shí)間序列重采樣和pandas的resample方法示例解析
這篇文章主要為大家介紹了時(shí)間序列重采樣和pandas的resample方法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09

