使用Pandas進行缺失值處理和異常值檢測——實戰指南

目錄

一、缺失值處理

1.1 缺失值的識別

1.2 刪除缺失值

1.3 填充缺失值

二、異常值檢測

2.1 異常值的定義

2.2 常用檢測方法

IQR(四分位數間距)法

Z-score(標準分數)法

三、實戰案例:基因表達數據預處理

四、總結


數據分析過程中,數據的質量直接影響分析結果的可靠性。缺失值和異常值是兩類常見的數據問題,如果不及時處理,可能會導致模型偏差、誤判或不穩定的結果。本文將詳細介紹如何使用Pandas對數據中的缺失值進行處理,以及如何檢測并處理異常值,幫助你構建更為健壯的數據預處理流程。


一、缺失值處理

1.1 缺失值的識別

在Pandas中,缺失值通常由NaN表示。我們可以利用內置方法快速識別數據中缺失值的分布和數量。

示例代碼

import?pandas?as?pd
import?numpy?as?np# 構造示例DataFrame
data?=?{'A': [1,?2,?np.nan,?4,?5],'B': [5,?np.nan,?np.nan,?8,?10],'C': [np.nan,?2,?3,?4,?5]
}
df?=?pd.DataFrame(data)
print("原始數據:")
print(df)# 檢查每一列缺失值數量
print("\n缺失值統計:")
print(df.isnull().sum())
原始數據:A ? ? B ? ?C
0 ?1.0 ? 5.0 ?NaN
1 ?2.0 ? NaN ?2.0
2 ?NaN ? NaN ?3.0
3 ?4.0 ? 8.0 ?4.0
4 ?5.0 ?10.0 ?5.0缺失值統計:
A ? ?1
B ? ?2
C ? ?1
dtype: int64

1.2 刪除缺失值

如果缺失值比例較小或缺失行/列對分析影響不大,可以使用dropna()方法刪除缺失值。

示例代碼

# 刪除含有缺失值的行
df_drop_rows?=?df.dropna()
print("\n刪除含有缺失值的行后的數據:")
print(df_drop_rows)# 刪除含有缺失值的列
df_drop_columns?=?df.dropna(axis=1)
print("\n刪除含有缺失值的列后的數據:")
print(df_drop_columns)
刪除含有缺失值的行后的數據:A ? ? B ? ?C
3 ?4.0 ? 8.0 ?4.0
4 ?5.0 ?10.0 ?5.0刪除含有缺失值的列后的數據:
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 4]

1.3 填充缺失值

有時候刪除缺失值會導致數據量驟減,此時可以考慮填充缺失值。常用方法包括使用均值、中位數、前一個有效值等進行填充。

示例代碼

# 使用每列均值填充缺失值
df_filled_mean?=?df.fillna(df.mean())
print("\n使用均值填充缺失值后的數據:")
print(df_filled_mean)# 使用前向填充方法填充缺失值
df_filled_ffill?=?df.fillna(method='ffill')
print("\n使用前向填充后的數據:")
print(df_filled_ffill)
使用均值填充缺失值后的數據:A ? ? ? ? ?B ? ?C
0 ?1.0 ? 5.000000 ?3.5
1 ?2.0 ? 7.666667 ?2.0
2 ?3.0 ? 7.666667 ?3.0
3 ?4.0 ? 8.000000 ?4.0
4 ?5.0 ?10.000000 ?5.0使用前向填充后的數據:A ? ? B ? ?C
0 ?1.0 ? 5.0 ?NaN
1 ?2.0 ? 5.0 ?2.0
2 ?2.0 ? 5.0 ?3.0
3 ?4.0 ? 8.0 ?4.0
4 ?5.0 ?10.0 ?5.0

二、異常值檢測

2.1 異常值的定義

異常值通常是指與其他數據相比顯著偏離的數據點。它們可能由測量錯誤、數據錄入錯誤或真實的罕見現象引起。檢測并處理異常值對于避免模型誤判十分關鍵。

2.2 常用檢測方法

IQR(四分位數間距)法

IQR方法利用數據的四分位數來識別異常值:

  • 計算第一四分位數(Q1)和第三四分位數(Q3)。

  • IQR = Q3 - Q1

  • 通常認為低于?Q1 - 1.5*IQR?或高于?Q3 + 1.5*IQR?的數據為異常值。

示例代碼

# 構造示例數據
data_outliers?=?{'Value': [10,?12,?11,?13,?100,?12,?11,?14,?10,?13]
}
df_outliers?=?pd.DataFrame(data_outliers)# 計算四分位數和IQR
Q1?=?df_outliers['Value'].quantile(0.25)
Q3?=?df_outliers['Value'].quantile(0.75)
IQR?=?Q3?-?Q1print("Q1: {:.2f}, Q3: {:.2f}, IQR: {:.2f}".format(Q1,?Q3,?IQR))# 定義異常值檢測條件
lower_bound?=?Q1?-?1.5?*?IQR
upper_bound?=?Q3?+?1.5?*?IQRprint("異常值下界:{:.2f}, 上界:{:.2f}".format(lower_bound,?upper_bound))# 篩選非異常值數據
df_no_outliers?=?df_outliers[(df_outliers['Value']?>=?lower_bound)?&?(df_outliers['Value']?<=?upper_bound)]
print("\n去除異常值后的數據:")
print(df_no_outliers)
Q1: 11.00, Q3: 13.00, IQR: 2.00
異常值下界:8.00, 上界:16.00去除異常值后的數據:Value
0 ? ? 10
1 ? ? 12
2 ? ? 11
3 ? ? 13
5 ? ? 12
6 ? ? 11
7 ? ? 14
8 ? ? 10
9 ? ? 13
Z-score(標準分數)法

Z-score方法基于均值和標準差,將數據標準化后檢測偏離較遠的點。通常,當Z-score大于3或小于-3時,認為該數據點為異常值。

示例代碼

from scipy import stats# 計算Z-score
df_outliers['Z_score'] = stats.zscore(df_outliers['Value'])# 篩選Z-score在-3到3之間的數據
df_no_outliers_z = df_outliers[(df_outliers['Z_score'] > -3) & (df_outliers['Z_score'] < 3)]
print("\n使用Z-score方法去除異常值后的數據:")
print(df_no_outliers_z)
使用Z-score方法去除異常值后的數據:Value ? Z_score
0 ? ? 10 -0.400060
1 ? ? 12 -0.324577
2 ? ? 11 -0.362318
3 ? ? 13 -0.286835
4 ? ?100 ?2.996675
5 ? ? 12 -0.324577
6 ? ? 11 -0.362318
7 ? ? 14 -0.249094
8 ? ? 10 -0.400060
9 ? ? 13 -0.286835

注意:在使用Z-score方法時,數據應近似服從正態分布;對于偏態分布的數據,IQR方法可能更為合適。

三、實戰案例:基因表達數據預處理

假設我們在基因表達數據中不僅存在缺失值,還包含一些測量異常的表達值。下面展示如何將上述方法應用到實際數據中。

示例數據文件gene_expression.csv

Gene,Condition,Sample_A,Sample_B,Sample_C
Gene1,Treated,20,25,30
Gene2,Control,15,NA,18
Gene3,Treated,22,20,21
Gene4,Control,100,17,19 ?# 這里的100為異常值

實戰代碼

# 讀取數據
df_expr = pd.read_csv('gene_expression.csv', header=0, na_values=['NA'])# 將基因名稱設為索引
df_expr.set_index('Gene', inplace=True)
print("原始基因表達數據:")
print(df_expr)# 1. 缺失值處理:使用每列均值填充缺失值
df_expr.fillna(df_expr.mean(), inplace=True)
print("\n填充缺失值后的數據:")
print(df_expr)# 2. 異常值檢測:以Sample_A列為例,使用IQR方法檢測異常值
Q1 = df_expr['Sample_A'].quantile(0.25)
Q3 = df_expr['Sample_A'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQRprint("\nSample_A列 - Q1: {:.2f}, Q3: {:.2f}, IQR: {:.2f}".format(Q1, Q3, IQR))
print("Sample_A列 - 異常值下界:{:.2f}, 上界:{:.2f}".format(lower_bound, upper_bound))# 篩選非異常值數據
df_expr_no_outliers = df_expr[(df_expr['Sample_A'] >= lower_bound) & (df_expr['Sample_A'] <= upper_bound)]
print("\n去除Sample_A列異常值后的數據:")
print(df_expr_no_outliers)
原始基因表達數據:Condition ?Sample_A ?Sample_B ?Sample_C
Gene ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
Gene1 ? Treated ? ? ? ?20 ? ? ?25.0 ? ? ? ?30
Gene2 ? Control ? ? ? ?15 ? ? ? NaN ? ? ? ?18
Gene3 ? Treated ? ? ? ?22 ? ? ?20.0 ? ? ? ?21
Gene4 ? Control ? ? ? 100 ? ? ?17.0 ? ? ? ?19填充缺失值后的數據:Condition ?Sample_A ? Sample_B ?Sample_C
Gene ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Gene1 ? Treated ? ? ? ?20 ?25.000000 ? ? ? ?30
Gene2 ? Control ? ? ? ?15 ?20.666667 ? ? ? ?18
Gene3 ? Treated ? ? ? ?22 ?20.000000 ? ? ? ?21
Gene4 ? Control ? ? ? 100 ?17.000000 ? ? ? ?19Sample_A列 - Q1: 18.75, Q3: 41.50, IQR: 22.75
Sample_A列 - 異常值下界:-15.38, 上界:75.62去除Sample_A列異常值后的數據:Condition ?Sample_A ? Sample_B ?Sample_C
Gene ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Gene1 ? Treated ? ? ? ?20 ?25.000000 ? ? ? ?30
Gene2 ? Control ? ? ? ?15 ?20.666667 ? ? ? ?18
Gene3 ? Treated ? ? ? ?22 ?20.000000 ? ? ? ?21

四、總結

在數據預處理中,去除缺失值和檢測異常值是確保數據質量的關鍵步驟。通過Pandas提供的方法,我們可以快速識別并處理缺失數據;利用IQR和Z-score方法,我們可以檢測并剔除明顯偏離的數據點,從而為后續分析和建模打下堅實的基礎。掌握這些技巧不僅能提高數據分析的準確性,也有助于構建更加穩健的分析流程。

歡迎大家在評論區分享你們在實際應用中的經驗和問題,進一步探討數據預處理中的最佳實踐!

  • 圖片

  • AIDD learning 便捷查看
  • 方式1:(免費獲取)轉發此文章至朋友圈(所有人可見,獲6個贊)或者3個群,并附“推薦關注學習”,1小時后將截圖發送后臺留言:2025312pandas。本人會在24小時內回復您獲取資料。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96552.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96552.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96552.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

B.30.01.1-Java并發編程及電商場景應用

摘要 本文深入探討了Java并發編程的核心概念及其在電商系統中的實際應用。從基礎并發機制到高級并發工具&#xff0c;結合電商業務場景中的典型問題&#xff0c;如高并發秒殺、庫存管理、訂單處理等&#xff0c;提供了實用的解決方案和最佳實踐。 1. Java并發編程基礎 1.1 并發…

怎樣避免游戲檢測到云手機?

以下是一些可能避免游戲檢測到云手機的方法&#xff1a;云手機可能會因網絡配置等因素出現一些異常網絡行為&#xff0c;如網絡延遲的規律性變化等&#xff0c;在使用云手機玩游戲時&#xff0c;盡量保持網絡行為的穩定性和自然性&#xff0c;避免短時間內頻繁切換網絡連接&…

文件上傳 --- uploadlabs靶場

目錄 1 前端和js校驗 抓包改包 2 . 2.1 .htaccess&#xff08;偽靜態&#xff09; 2.2 %00截斷 &#xff08;php5.2&#xff09; 2.3 user_init_ 2.4 3 圖片碼防御 4 競爭型漏洞 思路&#xff1a; 容易出現的問題: 1 前端和js校驗 關閉JS的代碼&#xff0c;上傳PHP…

漢化版本 k6 dashboard

目前官方提供的 dashboard 只有英文版本&#xff0c;國內使用不方便&#xff0c;因此 fork 了下官方倉庫&#xff0c;添加了漢化版本 https://github.com/kinghard7/xk6-dashboardhttps://github.com/kinghard7/xk6-dashboard安裝 xk6 構建程序&#xff1a;go install go.k6.i…

視覺識別:ffmpeg-python、ultralytics.YOLO、OpenCV-Python、標準RTSP地址格式

視覺識別:ffmpeg-python、ultralytics.YOLO、OpenCV-Python、標準RTSP地址格式 ffmpeg-python 核心概念 常用過濾器(Filters) 高級操作 視頻截幀轉換圖片示例 參考 ultralytics.YOLO(You Only Look Once) 1. 模型加載 2. 訓練模型 (`train()`) 標準YAML格式示例 3. 預測 (…

浙江龍庭翔新型建筑材料有限公司全屋定制:暢享品質生活新境界!

在消費升級的時代浪潮中&#xff0c;浙江龍庭翔新型建筑材料有限公司以卓越的產品質量和創新的服務理念&#xff0c;重新定義全屋定制的內涵&#xff0c;為追求高品質生活的消費者打造理想家居。公司秉承"匠心質造&#xff0c;樂享生活"的核心價值觀&#xff0c;將環…

鷹角網絡基于阿里云 EMR Serverless StarRocks 的實時分析工程實踐

一、客戶背景與業務挑戰 1.1 客戶介紹 鷹角網絡&#xff08;HYPERGRYPH&#xff09; 成立于2017年&#xff0c;總部位于上海&#xff0c;是中國知名游戲研發與發行公司&#xff0c;代表產品包括現象級手游《明日方舟》及《泡姆泡姆》《來自星辰》《終末地》等。公司依托阿里云…

LWIP的IP 協議棧

IP 協議棧 下面的分析把上文對 IPv4 概念的說明與 lwIP 中的具體實現代碼對應起來&#xff0c;便于將理論與實現對照理解。分析覆蓋&#xff1a;輸入處理、路由與轉發、輸出與報文構建、分片/重組、校驗和與各種配置點&#xff08;hook、選項、統計等&#xff09;。目錄&#x…

高并發短信網關平臺建設方案概述

本方案涵蓋了架構設計、技術選型、核心功能、高可用保障以及實施路徑,旨在構建一個能夠應對千萬級日吞吐量、穩定、安全、可擴展的現代短信網關平臺。 高并發短信網關平臺建設方案 一、 項目概述與目標 1.1 項目背景 為滿足公司業務(如用戶注冊、登錄、交易驗證、營銷通知…

阿里云服務-開啟對象存儲服務及獲取AccessKey教程

&#xff08;1&#xff09;阿里云OSS簡介 &#xff08;2&#xff09;打開阿里云網址&#xff1a;阿里云登錄 - 歡迎登錄阿里云&#xff0c;安全穩定的云計算服務平臺 點擊“立即開通” &#xff08;2&#xff09;開通成功后&#xff0c;充值任意金額 頂欄選擇“費用”|“充值…

[特殊字符] 高可用高并發微服務架構設計:Nginx 與 API Gateway 的協同實踐

一、Nginx 和 Gateway 的關系&#xff1a;是替代還是協作&#xff1f; 不是替代關系&#xff0c;而是協作關系。 1. Nginx 的角色&#xff08;通常在最外層&#xff09; 反向代理 & 負載均衡&#xff1a;將前端請求分發到多個后端服務或網關實例。 靜態資源服務&#xf…

解碼LLM量化:深入剖析最常見8位與4位核心算法

解碼LLM量化&#xff1a;深入剖析8位與4位核心算法 大型語言模型&#xff08;LLM&#xff09;的性能日益強大&#xff0c;但其龐大的體積和高昂的計算成本構成了部署的主要障礙。模型量化&#xff0c;作為一種將高精度浮點權重&#xff08;如16位&#xff09;映射到低位寬整數&…

提問:溫度不改變 logits 與概率的排名,為何還會影響模型輸出?

你此前圍繞溫度的核心困惑始終是&#xff1a;“溫度不改變 logits 與概率的排名&#xff0c;為何還會影響模型輸出&#xff1f;” 以下總結將緊扣這一困惑&#xff0c;并重點補充核采樣&#xff08;Top-p&#xff09;在其中的作用&#xff0c;明確溫度與核采樣如何共同影響輸出…

【文獻閱讀】Lossless data compression by large models

1. 中華人工智能研究中心&#xff0c;鄭州。 2. 鵬程實驗室&#xff0c;深圳。 3. 上海數學與交叉學科研究所&#xff0c;上海。 4. 中國科學院計算技術研究所&#xff0c;北京。 5. 寧波人工智能產業研究所&#xff0c;寧波。 6. 滑鐵盧大學計算機科學學院&#xff0c;加拿大安…

注意力機制:捕獲長距離依賴關系的革命性技術

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; ? 1. 注意力機制概述&#xff1a;為什么需要關注"長距離依賴&qu…

PHP如何使用JpGraph生成柱形圖?

PHP使用JpGraph庫生成各類統計圖形具有顯著優勢&#xff0c;該庫作為專業的PHP圖表生成工具&#xff0c;能夠高效創建包括折線圖、餅圖、散點圖在內的多種數據可視化圖形&#xff0c;其核心價值在于提供了豐富的圖形定制能力和簡潔的API接口。JpGraph通過純PHP實現&#xff0c;…

免費的端口映射工具 ChmlFrp

免費的端口映射工具 ChmlFrp 前言&#xff1a;之前我寫過一篇關于cloudflare tunnel的使用教程&#xff0c;ChmlFrp是一個類似的工具&#xff0c;也可以用來進行內網穿透 我的博客對應文章地址 1.注冊賬號 注冊地址 點擊這個鏈接前往官網注冊一個賬號&#xff0c;過程簡單&…

遙感領域解決方案丨涵蓋:高光譜、無人機多光譜、空天地數據識別與計算

一&#xff1a;AI智慧高光譜遙感實戰&#xff1a;手撕99個案例項目、全覆蓋技術鏈與應用場景一站式提升方案在遙感技術飛速發展的今天&#xff0c;高光譜數據以其獨特的光譜分辨率成為環境監測、精準農業、地質勘探等領域的核心數據源。然而&#xff0c;海量的波段數據、復雜的…

中科米堆CASAIM自動化三維測量設備測量汽車殼體直徑尺寸

隨著新能源汽車產業向輕量化與高集成度發展&#xff0c;殼體作為電池組和電驅系統的核心承載部件&#xff0c;其孔位加工精度直接影響裝配密封性及結構強度&#xff0c;傳統人工測量方式已難以滿足現代化生產需求。自動化三維測量設備的引入&#xff0c;為汽車殼體直徑尺寸測量…

08.21總結

圓方樹 引入 我們注意到&#xff0c;樹結構相比普通圖具有諸多優良特性。若能將在無向圖上求解的問題轉化為樹結構問題&#xff0c;往往能大幅簡化求解過程。圓方樹正是實現這一轉化的有效工具。 定義 我們稱原圖中的點為"圓點"。通過引入方點并調整邊的關系&#xf…