
在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻痛點 ——Excel 表中的空白單元格、“N/A” 標記或格式錯誤,導入后常會轉(zhuǎn)化為 pandas 中的NaN
(Not a Number)值。這些缺失值若不處理,會導致統(tǒng)計分析偏差(如均值計算不準)、模型訓練報錯(如機器學習算法無法識別NaN
)。而dropna
作為 pandas 中刪除缺失值的核心函數(shù),是解決這一問題的關(guān)鍵工具。本文將從 Excel 數(shù)據(jù)缺失場景出發(fā),全面解析dropna
的作用、參數(shù)配置與實戰(zhàn)用法,幫助讀者高效完成數(shù)據(jù)清洗。
在用dropna
處理缺失值前,需先明確 Excel 數(shù)據(jù)缺失的根源與影響,避免 “盲目刪除” 導致數(shù)據(jù)浪費。
Excel 作為手動錄入、多表合并的常用工具,缺失值的產(chǎn)生往往與操作場景相關(guān):
手工錄入遺漏:如員工信息表中,部分員工的 “入職日期”“聯(lián)系方式” 因錄入疏忽未填寫,形成空白單元格;
數(shù)據(jù)格式不兼容:Excel 表中混合文本與數(shù)值格式(如 “年齡” 列既有數(shù)字 “25”,又有文本 “待補充”),導入 pandas 時文本內(nèi)容會被識別為NaN
;
多表合并殘留:將 Excel 表 “銷售數(shù)據(jù)” 與 “客戶信息” 合并時,部分客戶無匹配的銷售記錄,導致 “銷售額”“訂單號” 列出現(xiàn)NaN
;
系統(tǒng)導出缺陷:從業(yè)務系統(tǒng)導出 Excel 數(shù)據(jù)時,因字段未配置或接口異常,部分列(如 “物流單號”)自動填充為空白。
若直接用含缺失值的 Excel 數(shù)據(jù)做分析,會引發(fā)一系列問題:
統(tǒng)計結(jié)果失真:計算 “平均銷售額” 時,NaN
值會被自動排除,若缺失值占比高(如 30%),會導致均值偏離真實水平;
可視化錯誤:用含NaN
的 “月度銷量” 列繪制折線圖時,會出現(xiàn)斷點或空白區(qū)域,無法完整呈現(xiàn)趨勢;
dropna
是 pandas 庫中專門用于 “刪除含NaN
值的行或列” 的函數(shù),其核心作用可概括為:通過靈活配置參數(shù),選擇性剔除數(shù)據(jù)集中 “無效的行 / 列”,保留完整、可用的數(shù)據(jù)樣本,為后續(xù)分析(如統(tǒng)計計算、建模)掃清障礙。
簡單來說,當 Excel 導入的數(shù)據(jù)表存在 “某行多個字段缺失”“某列全是空白” 時,dropna
能幫你快速篩選出 “無缺失的有效數(shù)據(jù)”—— 例如,刪除 “銷售額” 列缺失的行,避免這些無效數(shù)據(jù)影響 “月度銷售總額” 的計算。
處理缺失值的方法還有 “填充法”(如用均值、中位數(shù)填充,fillna
函數(shù)),但dropna
的優(yōu)勢在于:
當缺失值占比低(如 < 5%)且無規(guī)律時,刪除含缺失值的行 / 列對整體數(shù)據(jù)影響小,操作更簡單;
當缺失值對應的是 “無效樣本”(如 Excel 表中 “訂單號” 缺失的行,無實際業(yè)務意義),刪除是最合理的選擇,避免填充導致的虛假數(shù)據(jù)。
dropna
的靈活性體現(xiàn)在參數(shù)配置上 —— 通過調(diào)整axis
(方向)、how
(刪除條件)、subset
(指定列)等參數(shù),可精準控制刪除范圍,避免誤刪有用數(shù)據(jù)。以下是 Excel 數(shù)據(jù)處理中最常用的 4 個參數(shù):
參數(shù)名 | 取值范圍 | 核心作用 | Excel 數(shù)據(jù)場景示例 |
---|---|---|---|
axis |
0(默認)/1 | 0 = 刪除含缺失值的行;1 = 刪除含缺失值的列 | 若 Excel “用戶表” 中部分行的 “手機號” 缺失→用axis=0 刪行;某列 “備注” 全是空白→用axis=1 刪列 |
how |
'any'(默認)/'all' | 'any'= 行 / 列只要有一個缺失值就刪除;'all'= 行 / 列所有值都缺失才刪除 | 若 Excel “訂單表” 中某行 “訂單號” 缺失(其他字段完整)→'any' 會刪除該行;某行全空白→'all' 才刪除 |
subset |
列表(如 [' 列 1',' 列 2']) | 僅針對指定列的缺失值判斷是否刪除行(僅對axis=0 生效) |
僅關(guān)注 Excel “銷售表” 中 “銷售額”“訂單日期” 列的缺失值→subset=['銷售額','訂單日期'] ,其他列缺失不影響 |
thresh |
整數(shù)(如 3) | 行 / 列至少有 N 個非缺失值才保留,否則刪除(與how 互補) |
Excel “產(chǎn)品表” 需保留 “產(chǎn)品 ID、名稱、價格”3 個核心列無缺失的行→thresh=3 |
結(jié)合 Excel 數(shù)據(jù)的常見缺失情況,以下用 pandas 代碼演示dropna
的實戰(zhàn)應用,從 “導入 Excel” 到 “刪除缺失值” 形成完整流程。
首先需安裝 pandas 和讀取 Excel 的依賴庫(openpyxl
用于讀取.xlsx 格式,xlrd
用于.xls 格式):
pip install pandas openpyxl xlrd
假設(shè)我們有一份 Excel 文件sales_data.xlsx
,包含 “訂單號、客戶 ID、銷售額、訂單日期、物流單號”5 列,導入后的數(shù)據(jù)如下(含缺失值):
訂單號 | 客戶 ID | 銷售額 | 訂單日期 | 物流單號 |
---|---|---|---|---|
1001 | C001 | 500.0 | 2024-01-01 | SF123 |
1002 | NaN | 800.0 | 2024-01-02 | NaN |
1003 | C003 | NaN | 2024-01-03 | ZT456 |
1004 | NaN | NaN | NaN | NaN |
1005 | C005 | 1200.0 | 2024-01-05 | NaN |
需求:Excel 數(shù)據(jù)中,只要 “訂單號、客戶 ID、銷售額” 等任意一列有缺失,就刪除該行(確保每行數(shù)據(jù)完整)。
代碼:
import pandas as pd
# 1. 導入Excel數(shù)據(jù)(指定sheet,讀取.xlsx需用engine='openpyxl')
df = pd.read_excel("sales_data.xlsx", sheet_name="Sheet1", engine="openpyxl")
# 2. 查看導入后的缺失值情況
print("導入后的數(shù)據(jù)缺失值統(tǒng)計:")
print(df.isnull().sum()) # 輸出每列缺失值數(shù)量:客戶ID=2,銷售額=1,物流單號=3,訂單日期=1
# 3. 用dropna默認參數(shù)刪除含缺失值的行(axis=0, how='any')
df_clean1 = df.dropna()
# 4. 查看清洗后的數(shù)據(jù)
print("n刪除任何一列有缺失的行后:")
print(df_clean1)
# 結(jié)果:僅保留1001行(無任何缺失值),其他4行因含缺失值被刪除
需求:Excel 數(shù)據(jù)中,僅當某行所有列(如 1004 行 “訂單號、客戶 ID” 全為NaN
)都缺失時才刪除,部分缺失的行(如 1002 行 “客戶 ID、物流單號” 缺失)保留。
代碼:
# 用how='all'刪除全缺失的行
df_clean2 = df.dropna(how="all")
print("僅刪除全缺失的行后:")
print(df_clean2)
# 結(jié)果:刪除1004行(全缺失),保留1001、1002、1003、1005行(部分缺失)
需求:Excel 數(shù)據(jù)中,僅關(guān)注 “訂單號、銷售額、訂單日期”3 個核心列 —— 只要這 3 列有一個缺失,就刪除該行;其他列(如 “物流單號”)缺失不影響。
代碼:
# 用subset指定核心列,僅判斷這些列的缺失值
df_clean3 = df.dropna(subset=["訂單號", "銷售額", "訂單日期"])
print("僅刪除核心列(訂單號、銷售額、訂單日期)有缺失的行后:")
print(df_clean3)
# 結(jié)果:刪除1003行(銷售額缺失)、1004行(核心列全缺失),保留1001、1002、1005行
# (1002行“客戶ID、物流單號”缺失,但核心列完整,故保留)
需求:Excel 數(shù)據(jù)中,只要某行有至少 3 個列無缺失值,就保留;不足 3 個則刪除(適用于 “部分字段缺失但仍有分析價值” 的場景)。
代碼:
# 用thresh=3保留至少3個非缺失值的行
df_clean4 = df.dropna(thresh=3)
print("保留至少3個非缺失值的行后:")
print(df_clean4)
# 結(jié)果:
# 1001行(5個非缺失值)→ 保留;1002行(3個非缺失值)→ 保留;
# 1003行(3個非缺失值)→ 保留;1004行(0個)→ 刪除;1005行(4個)→ 保留
需求:若 Excel 導入的數(shù)據(jù)中,某列(如 “備用字段”)所有值都是NaN
,無任何分析價值,用dropna
刪除該列。
代碼:
# 先模擬一列全缺失的情況(在原df中添加“備用字段”列)
df["備用字段"] = pd.NA # 新增列全為缺失值
# 用axis=1刪除全缺失的列(how='all')
df_clean5 = df.dropna(axis=1, how="all")
print("刪除全缺失的列后,剩余列名:")
print(df_clean5.columns.tolist())
# 結(jié)果:刪除“備用字段”列,保留“訂單號、客戶ID、銷售額、訂單日期、物流單號”5列
dropna
雖操作簡單,但誤用可能導致有用數(shù)據(jù)丟失或分析偏差,需注意以下細節(jié):
刪除前務必用df.isnull().sum()
或df.isnull().mean()
查看缺失值占比:
若某列缺失值占比 > 50%(如 “物流單號” 缺失 70%),刪除該列更合理(避免刪除大量行);
若某行缺失值僅 1 個且為非核心列(如 “備注”),優(yōu)先保留該行(用fillna
填充,而非dropna
刪除)。
dropna
默認返回新的 DataFrame,不修改原始數(shù)據(jù),需將結(jié)果賦值給變量(如df_clean = df.dropna()
);若想直接修改原數(shù)據(jù),可加inplace=True
參數(shù):
df.dropna(inplace=True) # 直接在原df上刪除缺失行,無需賦值
Excel 中的 “空白單元格” 導入后會成為NaN
,但 “文本型無效值”(如 “無數(shù)據(jù)”“待補充”)需先轉(zhuǎn)化為NaN
,dropna
才能識別:
# 先將Excel中的“無數(shù)據(jù)”“待補充”轉(zhuǎn)化為NaN,再用dropna刪除
df = pd.read_excel("sales_data.xlsx")
df = df.replace(["無數(shù)據(jù)", "待補充"], pd.NA) # 替換無效文本為NaN
df_clean = df.dropna()
dropna(axis=1)
刪除列時需格外小心 —— 即使某列當前缺失值多,但后續(xù)可能通過其他表補充(如 “物流單號” 可從物流系統(tǒng)補錄),建議先備份原始數(shù)據(jù),再刪除列:
# 備份原始數(shù)據(jù),再刪除列
df_backup = df.copy() # 備份
df_clean = df_backup.dropna(axis=1, how="all") # 刪除全缺失列
dropna
的核心價值是 “快速剔除無效數(shù)據(jù)”,但并非所有缺失值場景都適用,需結(jié)合 Excel 數(shù)據(jù)的實際情況選擇:
缺失值占比低(<5%),且無規(guī)律(如隨機錄入遺漏);
缺失值對應 “無效樣本”(如 Excel 表中 “訂單號” 缺失的行,無業(yè)務意義);
后續(xù)分析對數(shù)據(jù)完整性要求高(如機器學習建模、精準統(tǒng)計計算)。
缺失值占比高(>10%),刪除會導致樣本量不足(如 “客戶年齡” 缺失 20%,可用均值填充);
缺失值有規(guī)律(如 Excel 表中 “季度銷售額” 的空值對應 “0 銷售額”,可用 0 填充)。
處理 Excel 導入數(shù)據(jù)時,建議遵循 “查→判→刪 / 填” 的流程:
查:用df.isnull().sum()
查看缺失值分布;
判:判斷缺失值來源(錄入遺漏 / 格式問題)與占比;
刪 / 填:占比低、無意義→用dropna
刪除;占比高、有規(guī)律→用fillna
填充。
通過合理使用dropna
,能有效凈化 Excel 導入的數(shù)據(jù),為后續(xù)的統(tǒng)計分析、可視化、建模打下堅實基礎(chǔ) —— 這也是數(shù)據(jù)處理中 “去偽存真” 的關(guān)鍵一步。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10