99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據(jù)時代【CDA干貨】Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用
【CDA干貨】Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用
2025-09-16
收藏

Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用

在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻痛點 ——Excel 表中的空白單元格、“N/A” 標記或格式錯誤,導入后常會轉化為 pandas 中的NaN(Not a Number)值。這些缺失值若不處理,會導致統(tǒng)計分析偏差(如均值計算不準)、模型訓練報錯(如機器學習算法無法識別NaN)。而dropna作為 pandas 中刪除缺失值的核心函數(shù),是解決這一問題的關鍵工具。本文將從 Excel 數(shù)據(jù)缺失場景出發(fā),全面解析dropna的作用、參數(shù)配置與實戰(zhàn)用法,幫助讀者高效完成數(shù)據(jù)清洗

一、先搞懂:Excel 導入數(shù)據(jù)的缺失值從哪來?有什么危害?

在用dropna處理缺失值前,需先明確 Excel 數(shù)據(jù)缺失的根源與影響,避免 “盲目刪除” 導致數(shù)據(jù)浪費。

1. Excel 數(shù)據(jù)缺失的 3 類常見來源

Excel 作為手動錄入、多表合并的常用工具,缺失值的產(chǎ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ù)時,因字段未配置或接口異常,部分列(如 “物流單號”)自動填充為空白。

2. 缺失值不處理的 4 大危害

若直接用含缺失值的 Excel 數(shù)據(jù)做分析,會引發(fā)一系列問題:

  • 統(tǒng)計結果失真:計算 “平均銷售額” 時,NaN值會被自動排除,若缺失值占比高(如 30%),會導致均值偏離真實水平;

  • 可視化錯誤:用含NaN的 “月度銷量” 列繪制折線圖時,會出現(xiàn)斷點或空白區(qū)域,無法完整呈現(xiàn)趨勢;

  • 模型訓練失敗機器學習算法(如線性回歸決策樹)大多不支持NaN輸入,直接訓練會報錯;

  • 業(yè)務決策偏差:如用戶畫像分析中,“消費頻次” 列的缺失值若被誤判為 “0 次”,會導致低價值用戶群體誤判。

二、dropna 的核心作用:精準刪除 “含缺失值的行 / 列”,凈化數(shù)據(jù)

dropnapandas 庫中專門用于 “刪除含NaN值的行或列” 的函數(shù),其核心作用可概括為:通過靈活配置參數(shù),選擇性剔除數(shù)據(jù)集中 “無效的行 / 列”,保留完整、可用的數(shù)據(jù)樣本,為后續(xù)分析(如統(tǒng)計計算、建模)掃清障礙

簡單來說,當 Excel 導入的數(shù)據(jù)表存在 “某行多個字段缺失”“某列全是空白” 時,dropna能幫你快速篩選出 “無缺失的有效數(shù)據(jù)”—— 例如,刪除 “銷售額” 列缺失的行,避免這些無效數(shù)據(jù)影響 “月度銷售總額” 的計算。

關鍵提醒:dropna 不是 “唯一選擇”,但卻是 “高效選擇”

處理缺失值的方法還有 “填充法”(如用均值、中位數(shù)填充,fillna函數(shù)),但dropna的優(yōu)勢在于:

  • 缺失值占比低(如 < 5%)且無規(guī)律時,刪除含缺失值的行 / 列對整體數(shù)據(jù)影響小,操作更簡單;

  • 缺失值對應的是 “無效樣本”(如 Excel 表中 “訂單號” 缺失的行,無實際業(yè)務意義),刪除是最合理的選擇,避免填充導致的虛假數(shù)據(jù)。

三、dropna 的參數(shù)拆解:3 個核心參數(shù),控制 “刪什么、怎么刪”

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生效) 僅關注 Excel “銷售表” 中 “銷售額”“訂單日期” 列的缺失值subset=['銷售額','訂單日期'],其他列缺失不影響
thresh 整數(shù)(如 3) 行 / 列至少有 N 個非缺失值才保留,否則刪除(與how互補) Excel “產(chǎn)品表” 需保留 “產(chǎn)品 ID、名稱、價格”3 個核心列無缺失的行→thresh=3

四、實戰(zhàn):用 dropna 處理 Excel 導入數(shù)據(jù)的 5 類典型場景

結合 Excel 數(shù)據(jù)的常見缺失情況,以下用 pandas 代碼演示dropna的實戰(zhàn)應用,從 “導入 Excel” 到 “刪除缺失值” 形成完整流程。

前提準備:導入工具與數(shù)據(jù)

首先需安裝 pandas 和讀取 Excel 的依賴庫(openpyxl用于讀取.xlsx 格式,xlrd用于.xls 格式):

pip install pandas openpyxl xlrd

假設我們有一份 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

場景 1:刪除 “任何一列有缺失” 的行(默認用法)

需求: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)

# 結果:僅保留1001行(無任何缺失值),其他4行因含缺失值被刪除

場景 2:僅刪除 “所有列都缺失” 的行(保留部分有效數(shù)據(jù))

需求:Excel 數(shù)據(jù)中,僅當某行所有列(如 1004 行 “訂單號、客戶 ID” 全為NaN)都缺失時才刪除,部分缺失的行(如 1002 行 “客戶 ID、物流單號” 缺失)保留。

代碼

# 用how='all'刪除全缺失的行

df_clean2 = df.dropna(how="all")

print("僅刪除全缺失的行后:")

print(df_clean2)

# 結果:刪除1004行(全缺失),保留1001、1002、1003、1005行(部分缺失)

場景 3:僅針對 “核心列” 刪除缺失行(避免誤刪)

需求:Excel 數(shù)據(jù)中,僅關注 “訂單號、銷售額、訂單日期”3 個核心列 —— 只要這 3 列有一個缺失,就刪除該行;其他列(如 “物流單號”)缺失不影響。

代碼

# 用subset指定核心列,僅判斷這些列的缺失值

df_clean3 = df.dropna(subset=["訂單號""銷售額""訂單日期"])

print("僅刪除核心列(訂單號、銷售額、訂單日期)有缺失的行后:")

print(df_clean3)

# 結果:刪除1003行(銷售額缺失)、1004行(核心列全缺失),保留1001、1002、1005行

# (1002行“客戶ID、物流單號”缺失,但核心列完整,故保留)

場景 4:保留 “至少 3 個非缺失值” 的行(靈活篩選)

需求:Excel 數(shù)據(jù)中,只要某行有至少 3 個列無缺失值,就保留;不足 3 個則刪除(適用于 “部分字段缺失但仍有分析價值” 的場景)。

代碼

# 用thresh=3保留至少3個非缺失值的行

df_clean4 = df.dropna(thresh=3)

print("保留至少3個非缺失值的行后:")

print(df_clean4)

# 結果:

# 1001行(5個非缺失值)→ 保留;1002行(3個非缺失值)→ 保留;

# 1003行(3個非缺失值)→ 保留;1004行(0個)→ 刪除;1005行(4個)→ 保留

場景 5:刪除 “全是缺失值的列”(清理無效列)

需求:若 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())

# 結果:刪除“備用字段”列,保留“訂單號、客戶ID、銷售額、訂單日期、物流單號”5列

五、使用 dropna 的 4 個關鍵注意事項:避免踩坑

dropna雖操作簡單,但誤用可能導致有用數(shù)據(jù)丟失或分析偏差,需注意以下細節(jié):

1. 先查缺失值分布,再決定是否刪除

刪除前務必用df.isnull().sum()df.isnull().mean()查看缺失值占比:

  • 若某列缺失值占比 > 50%(如 “物流單號” 缺失 70%),刪除該列更合理(避免刪除大量行);

  • 若某行缺失值僅 1 個且為非核心列(如 “備注”),優(yōu)先保留該行(用fillna填充,而非dropna刪除)。

2. dropna 默認 “不修改原數(shù)據(jù)”,需賦值或用 inplace=True

dropna默認返回新的 DataFrame,不修改原始數(shù)據(jù),需將結果賦值給變量(如df_clean = df.dropna());若想直接修改原數(shù)據(jù),可加inplace=True參數(shù):

df.dropna(inplace=True)  # 直接在原df上刪除缺失行,無需賦值

3. 區(qū)分 “空白單元格” 與 “無效值” 的導入處理

Excel 中的 “空白單元格” 導入后會成為NaN,但 “文本型無效值”(如 “無數(shù)據(jù)”“待補充”)需先轉化為NaN,dropna才能識別:

# 先將Excel中的“無數(shù)據(jù)”“待補充”轉化為NaN,再用dropna刪除

df = pd.read_excel("sales_data.xlsx")

df = df.replace(["無數(shù)據(jù)""待補充"], pd.NA)  # 替換無效文本為NaN

df_clean = df.dropna()

4. 謹慎刪除列:避免丟失潛在有用數(shù)據(jù)

dropna(axis=1)刪除列時需格外小心 —— 即使某列當前缺失值多,但后續(xù)可能通過其他表補充(如 “物流單號” 可從物流系統(tǒng)補錄),建議先備份原始數(shù)據(jù),再刪除列:

# 備份原始數(shù)據(jù),再刪除列

df_backup = df.copy()  # 備份

df_clean = df_backup.dropna(axis=1, how="all")  # 刪除全缺失列

六、總結:dropna 的適用場景與 “替代方案” 選擇

dropna的核心價值是 “快速剔除無效數(shù)據(jù)”,但并非所有缺失值場景都適用,需結合 Excel 數(shù)據(jù)的實際情況選擇:

1. 優(yōu)先用 dropna 的 3 種場景

  • 缺失值占比低(<5%),且無規(guī)律(如隨機錄入遺漏);

  • 缺失值對應 “無效樣本”(如 Excel 表中 “訂單號” 缺失的行,無業(yè)務意義);

  • 后續(xù)分析對數(shù)據(jù)完整性要求高(如機器學習建模、精準統(tǒng)計計算)。

2. 改用 “填充法”(fillna)的 2 種場景

  • 缺失值占比高(>10%),刪除會導致樣本量不足(如 “客戶年齡” 缺失 20%,可用均值填充);

  • 缺失值有規(guī)律(如 Excel 表中 “季度銷售額” 的空值對應 “0 銷售額”,可用 0 填充)。

3. 數(shù)據(jù)清洗的 “黃金流程”

處理 Excel 導入數(shù)據(jù)時,建議遵循 “查→判→刪 / 填” 的流程:

  1. :用df.isnull().sum()查看缺失值分布;

  2. :判斷缺失值來源(錄入遺漏 / 格式問題)與占比;

  3. 刪 / 填:占比低、無意義→用dropna刪除;占比高、有規(guī)律→用fillna填充。

通過合理使用dropna,能有效凈化 Excel 導入的數(shù)據(jù),為后續(xù)的統(tǒng)計分析、可視化、建模打下堅實基礎 —— 這也是數(shù)據(jù)處理中 “去偽存真” 的關鍵一步。

推薦學習書籍 《CDA一級教材》適合CDA一級考生備考,也適合業(yè)務及數(shù)據(jù)分析崗位的從業(yè)者提升自我。完整電子版已上線CDA網(wǎng)校,累計已有10萬+在讀~ !

免費加入閱讀:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }