Pandas-數據查看與質量檢查

Pandas-數據查看與質量檢查

    • 一、數據查看:快速掌握數據概況
      • 1. 整體概覽:shape與info()
      • 2. 數值特征預覽:describe()
      • 3. 隨機抽樣:head()與sample()
    • 二、數據質量檢查:識別與處理問題
      • 1. 缺失值檢查與處理
        • 處理策略:
      • 2. 異常值檢測與處理
        • 處理策略:
      • 3. 重復數據檢查與處理
      • 4. 數據類型錯誤處理
    • 三、高級檢查:一致性與邏輯性驗證
    • 四、實戰案例:完整數據質量檢查流程

數據分析流程中,拿到數據后的第一步不是急于建模或可視化,而是全面了解數據——包括數據規模、結構、取值分布以及潛在的質量問題。Pandas作為數據處理的利器,提供了一系列簡潔高效的工具,幫助我們快速完成數據查看與質量檢查。

一、數據查看:快速掌握數據概況

數據查看的核心目標是回答“數據是什么樣的”,包括樣本量、特征數、數據類型、取值范圍等基礎信息。Pandas的幾個核心函數可以幫我們快速建立對數據的認知。

1. 整體概覽:shape與info()

import pandas as pd
import numpy as np# 讀取示例數據(假設為某電商用戶行為數據)
df = pd.read_csv('user_behavior.csv')# 查看數據規模(行數×列數)
print(f"數據形狀:{df.shape}")  # 輸出:數據形狀:(10000, 8)# 查看詳細信息(數據類型、非空值數量)
df.info()

info()的輸出包含關鍵信息:

  • 每列的名稱、數據類型(dtype
  • 非空值數量(可快速判斷是否存在缺失值)
  • 內存占用(幫助評估數據規模)

例如,若某列dtype顯示為object但實際應為日期,或某列非空值遠少于總行數,這些都是需要進一步處理的信號。

2. 數值特征預覽:describe()

對于數值型列(int/float),describe()函數提供了基本統計量,幫助快速判斷數據分布:

# 查看數值列的統計摘要
df.describe()

輸出包含:

  • 計數(count)、均值(mean)、標準差(std
  • 最小值(min)、四分位數(25%/50%/75%)、最大值(max

通過這些指標可初步識別異常值(如最大值遠大于75%分位數)或分布偏態(如均值遠大于中位數)。

3. 隨機抽樣:head()與sample()

查看前幾行或隨機樣本,直觀感受數據內容:

# 查看前5行(默認)
df.head()# 查看后10行
df.tail(10)# 隨機抽取5行(避免數據排序導致的偏差)
df.sample(5)

這一步能發現明顯的數據錯誤,例如:

  • 日期列格式混亂(如同時存在2023/1/101-01-2023
  • 分類列存在拼寫錯誤(如"男""男性"同時出現)

二、數據質量檢查:識別與處理問題

數據質量直接決定分析結果的可靠性,常見問題包括缺失值、異常值、重復數據和數據類型錯誤,Pandas提供了針對性的檢測與處理工具。

1. 缺失值檢查與處理

缺失值是最常見的數據質量問題,需先明確缺失比例和模式:

# 計算每列缺失值數量及比例
missing_count = df.isnull().sum()
missing_ratio = (missing_count / len(df)).round(3)
missing_df = pd.DataFrame({'缺失值數量': missing_count,'缺失比例': missing_ratio
})
print(missing_df[missing_df['缺失值數量'] > 0])  # 只顯示有缺失的列
處理策略:
  • 刪除:缺失比例極高(如>80%)或對分析無影響的列:

    df = df.drop(columns=['irrelevant_col'])  # 刪除整列
    

    缺失行較少時可刪除行:

    df = df.dropna(subset=['critical_col'])  # 只刪除關鍵列缺失的行
    
  • 填充:根據列類型選擇填充方式:

    # 數值列:用均值/中位數填充(中位數更抗異常值)
    df['amount'] = df['amount'].fillna(df['amount'].median())# 分類列:用眾數或特殊值(如"未知")填充
    df['category'] = df['category'].fillna(df['category'].mode()[0])# 日期列:用前后值插值
    df['date'] = df['date'].fillna(method='ffill')  # 向前填充(用上一行值)
    

2. 異常值檢測與處理

異常值(離群點)可能扭曲統計結果,需結合業務邏輯判斷:

# 方法1:基于標準差(適用于近似正態分布的數據)
def detect_outliers_std(col, n_std=3):mean = col.mean()std = col.std()lower = mean - n_std * stdupper = mean + n_std * stdreturn (col < lower) | (col > upper)# 檢測數值列的異常值
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
for col in numeric_cols:outliers = detect_outliers_std(df[col])print(f"{col}異常值比例:{outliers.mean():.2%}")# 方法2:基于四分位數(IQR法,適用于偏態分布)
Q1 = df['amount'].quantile(0.25)
Q3 = df['amount'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers_iqr = (df['amount'] < lower_bound) | (df['amount'] > upper_bound)
處理策略:
  • 截斷:將異常值限制在合理范圍(如用上下邊界替換)
    df['amount'] = df['amount'].clip(lower_bound, upper_bound)
    
  • 標記:不刪除異常值,而是新增列標記供后續分析
    df['is_outlier'] = outliers_iqr
    

3. 重復數據檢查與處理

重復數據可能導致分析結果被高估,需檢測并去重:

# 檢查重復行數量
duplicate_count = df.duplicated().sum()
print(f"重復行數量:{duplicate_count}")# 查看重復樣本
if duplicate_count > 0:print(df[df.duplicated(keep=False)].sort_values(by=df.columns.tolist()))# 刪除重復行(保留第一行)
df = df.drop_duplicates(keep='first')

注意:重復行可能是真實數據(如用戶重復購買),需結合業務邏輯判斷是否去重。

4. 數據類型錯誤處理

數據類型錯誤會導致分析函數失效(如對字符串列計算均值),需針對性轉換:

# 1. 字符串轉日期(關鍵操作,否則無法按時間分組)
df['order_date'] = pd.to_datetime(df['order_date'], errors='coerce')
# errors='coerce'將無效格式轉為NaT(缺失日期)# 2. 數值型字符串轉數值(如"100"→100)
df['price'] = pd.to_numeric(df['price'], errors='coerce')# 3. 分類列優化(減少內存占用,便于后續分析)
df['gender'] = df['gender'].astype('category')

三、高級檢查:一致性與邏輯性驗證

除了基礎問題,還需驗證數據的業務邏輯性,例如:

  • 訂單金額不能為負
  • 開始日期不能晚于結束日期
# 檢查金額合理性
invalid_amount = df[df['amount'] < 0]
if not invalid_amount.empty:print(f"發現{len(invalid_amount)}條金額為負的記錄")df['amount'] = df['amount'].clip(lower=0)  # 修正為0# 檢查日期邏輯
df['start_date'] = pd.to_datetime(df['start_date'])
df['end_date'] = pd.to_datetime(df['end_date'])
invalid_dates = df[df['start_date'] > df['end_date']]
if not invalid_dates.empty:print(f"發現{len(invalid_dates)}條開始日期晚于結束日期的記錄")# 交換錯誤的日期mask = df['start_date'] > df['end_date']df.loc[mask, ['start_date', 'end_date']] = df.loc[mask, ['end_date', 'start_date']].values

四、實戰案例:完整數據質量檢查流程

def data_quality_check(df):"""數據質量檢查與清洗函數"""print("=== 數據概覽 ===")print(f"形狀:{df.shape}")df.info()print("\n=== 缺失值檢查 ===")missing = df.isnull().sum()missing = missing[missing > 0]if not missing.empty:print(missing)# 處理策略:數值列填充中位數,分類列填充眾數for col in missing.index:if pd.api.types.is_numeric_dtype(df[col]):df[col] = df[col].fillna(df[col].median())else:df[col] = df[col].fillna(df[col].mode()[0])print("缺失值已處理")else:print("無缺失值")print("\n=== 重復數據檢查 ===")duplicates = df.duplicated().sum()if duplicates > 0:df = df.drop_duplicates()print(f"刪除{duplicates}條重復行,剩余{len(df)}行")else:print("無重復數據")print("\n=== 異常值檢查 ===")numeric_cols = df.select_dtypes(include=['number']).columnsfor col in numeric_cols:Q1 = df[col].quantile(0.25)Q3 = df[col].quantile(0.75)IQR = Q3 - Q1outliers = (df[col] < (Q1 - 1.5 * IQR)) | (df[col] > (Q3 + 1.5 * IQR))if outliers.sum() > 0:print(f"{col}存在{outliers.sum()}個異常值,已截斷至合理范圍")df[col] = df[col].clip(Q1 - 1.5 * IQR, Q3 + 1.5 * IQR)print("\n=== 數據類型修正 ===")# 自動檢測并轉換日期列for col in df.columns:if 'date' in col.lower():df[col] = pd.to_datetime(df[col], errors='coerce')print("數據類型已修正")return df# 執行檢查與清洗
clean_df = data_quality_check(df)

總結:數據質量檢查的核心原則

  1. 全面掃描:結合統計指標與樣本查看,不遺漏任何列。
  2. 區別對待:根據列的類型(數值/分類/日期)選擇合適的檢查方法。
  3. 業務導向:異常值和缺失值的處理需符合業務邏輯,而非機械套用公式。
  4. 可復現性:將檢查與清洗步驟封裝為函數,確保流程可重復、可追溯。

That’s all, thanks for reading~~
覺得有用就點個贊、收進收藏夾吧!關注我,獲取更多干貨~

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

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

相關文章

類和對象拓展——日期類

一.前言通過前面對類和對象的學習&#xff0c;現在我們可以開始實踐日期類的代碼編寫。在實際操作過程中&#xff0c;我會補充之前文章中未提及的相關知識點。二.正文 1. 日期類代碼實現我們先來看看要實現什么功能吧&#xff0c;把他放在Date.h中#pragma once #include<ios…

大模型KV緩存量化誤差補償機制:提升推理效率的關鍵技術

大模型KV緩存量化誤差補償機制&#xff1a;提升推理效率的關鍵技術摘要 隨著大型語言模型&#xff08;LLM&#xff09;參數規模突破千億級別&#xff0c;推理過程中的顯存占用與計算延遲成為制約其實際部署的核心瓶頸。KV緩存&#xff08;Key-Value Cache&#xff09;作為Trans…

QT跨平臺應用程序開發框架(6)—— 常用顯示類控件

目錄 一&#xff0c;Label 1.1 主要屬性 1.2 文本格式 1.3 設置圖片 1.4 其它常用屬性 1.5 設置伙伴 二&#xff0c;LCD Number 2.1 主要屬性 2.2 實現倒計時 ?2.3 兩個問題 三&#xff0c;ProgressBar 3.1 主要屬性 3.2 進度條按時間增長 3.3 改變樣式 3.4 一個問題 四&#…

LINUX文件系統權限,命令解釋器alias,文件查看和查找

1、文件査看:查看/etc/passwd文件的第5行[rootserver ~]# head -5 /etc/passwd | tail -1 #先找到前5行&#xff0c;用管道符過濾&#xff0c;顯示倒數第一行2、文件查找(1)在當前目錄及子目錄中&#xff0c;查找大寫字母開頭的txt文件[rootserver ~]# find / -name "[…

AI圖像修復工具CodeFormer實測:馬賽克去除與畫質增強效果評測

大家好&#xff01;平時看圖片或視頻&#xff0c;是不是特別煩人臉被馬賽克遮住的地方&#xff1f;比如老照片模糊、視頻關鍵部分被打碼&#xff0c;看著很不舒服。今天給大家分享一款超好用的去馬賽克神器——CodeFormer&#xff0c;完全免費&#xff0c;新手也能輕松搞定&…

知識宇宙-思考篇:AI大模型如何重塑軟件開發流程?

名人說&#xff1a;博觀而約取&#xff0c;厚積而薄發。——蘇軾《稼說送張琥》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄AI大模型重塑軟件開發&#xff1a;從碼農到AI編程伙伴的華麗轉身一、AI大模型的編程&…

Rocky Linux上使用NVM安裝Node.js 18

問題描述 Rocky Linux 9 默認 yum 安裝的 Node.js 版本是16&#xff0c;vite啟動報錯&#xff1a;TypeError: crypto$2.getRandomValues is not a function &#xff0c;需安裝更高版本的 Node.js 使用nvm安裝Node.js的好處 多版本管理&#xff0c;NVM 允許你安裝多個不同版本的…

JVM 中“對象存活判定方法”全面解析

1. 前言 在 Java 開發過程中&#xff0c;我們常常聽到“垃圾回收”&#xff08;Garbage Collection, GC&#xff09;這一術語。JVM 通過垃圾回收機制自動管理內存&#xff0c;極大地簡化了程序員的內存控制負擔。然而&#xff0c;GC 究竟是如何判斷哪些對象該回收、哪些應保留…

蘋果公司高ROE分析

公司通過增加負債提升凈資產收益率&#xff08;ROE&#xff09;的核心機制在于財務杠桿效應和資本結構優化&#xff0c;以下從原理、操作路徑、風險邊界及蘋果案例四維度展開分析&#xff1a;名稱解釋&#xff1a; ROIC(投入資本回報率)&#xff1a;ROICNOPATInvested Capital …

【Linux系統】進程概念

1. 進程概念1.1 進程的本質核心定義用戶視角&#xff1a;程序的動態執行實例&#xff08;如同時運行多個Chrome窗口即多個進程&#xff09;。內核視角&#xff1a;資源分配的最小實體單位&#xff0c;獨享CPU時間片、內存空間和文件資源。現代定義&#xff1a;進程 內核數據結…

從LLM到VLM:視覺語言模型的核心技術與Python實現

本教程的完整代碼可以在GitHub上找到&#xff0c;如果你有任何問題或建議&#xff0c;歡迎交流討論。 引言&#xff1a;為什么需要VLM&#xff1f; 當我們與ChatGPT對話時&#xff0c;它能夠理解復雜的文字描述&#xff0c;生成流暢的回答。但如果我們給它一張圖片&#xff0c…

老系統改造增加初始化,自動化數據源配置(tomcat+jsp+springmvc)

老系統改造增加初始化&#xff0c;自動化數據源配置一、前言二、改造描述1、環境說明2、實現步驟簡要思考三、開始改造1、準備sql初始化文件2、啟動時自動讀取jdbc文件&#xff0c;創建數據源&#xff0c;如未配置&#xff0c;需要一個默認的臨時數據源2.1去掉sping mvc原本配置…

衛星通信終端天線的5種對星模式之二:DVB跟蹤

要實現穩定可靠的衛星通信&#xff0c;地面終端天線必須精準地對準遠方的衛星。對星的過程是一個不斷搜索、不斷逼近的過程&#xff0c;其目標是讓天線波束中心精確指向衛星&#xff0c;從而獲得最大信號接收與發射效率。 衛星通信終端天線的對星技術是保障衛星通信鏈路穩定的…

重構下一代智能電池“神經中樞”:GCKontrol定義高性能BMS系統級設計標桿

概述BMS&#xff08;電池管理系統&#xff09;作為新能源汽車動力電池與整車的核心紐帶&#xff0c;通過實時監控電壓、電流、溫度及SOC等參數&#xff0c;控制電池充放電過程&#xff0c;保障電池安全性與使用壽命。隨著電動汽車智能化發展&#xff0c;對BMS的響應速度、精度和…

面試150 對稱二叉樹

思路 聯想遞歸三部曲&#xff1a;傳入參數、遍歷方式、返回什么。本題聯想到先序遍歷的方式,需要遍歷整顆二叉樹,最后返回的是一個布爾值。然后我們需要傳入的是左子樹和左子樹的節點,然后分別進行比較。 # Definition for a binary tree node. # class TreeNode: # def __…

多線程的區別和聯系

進程和線程的區別和聯系1.一個進程可以包含多個線程&#xff0c;不能夠沒有線程2.進程是系統資源分配的基本單位&#xff0c;線程是系統調度執行的基本單位3.同一個進程里的線程之間&#xff0c;共用同一份系統資源4.線程是當下實現并發編程的主流方式&#xff0c;通過多線程&a…

兩個文件夾自動同步

兩個文件夾自動同步&#xff0c;非常簡單&#xff0c;利用一些工具就可以輕松做到&#xff0c;設置完源和目標文件夾&#xff0c;點擊啟動就馬上可以兩個文件夾自動同步&#xff0c;對于一些有文件同步、文件災備需求的老登&#xff0c;用起來會非常順手&#xff0c;比如PanguF…

虛擬商品交易維權指南:數字經濟時代的消費者權益保護

首席數據官高鵬律師數字經濟團隊創作AI輔助在元宇宙、NFT、虛擬情緒產品等新興領域蓬勃發展的今天&#xff0c;虛擬商品交易已成為數字經濟的重要組成部分。從游戲皮膚、在線課程到數字藏品&#xff0c;消費者在享受虛擬商品便捷性的同時&#xff0c;也面臨著諸多法律風險。作為…

mysql 一條語句的執行流程

文章目錄一條查詢語句的執行流程連接器管理連接權限校驗分析器優化器采樣統計優化器選錯索引改正執行器查詢緩存存儲引擎一條update語句的執行流程redo logredo log buffer結構redo log日志類型寫入時機配置innodb_flush_log_at_trx_commitbinlogredo log和binlog 對比配置兩階…

【視頻觀看系統】- 需求分析

&#x1f3af; 一、項目目標 構建一個功能完備的視頻觀看網站&#xff0c;用戶可以上傳、瀏覽、觀看視頻&#xff0c;并在觀看過程中實時發送/接收彈幕。系統具備良好的性能、可擴展性與用戶體驗&#xff0c;未來可逐步擴展為多媒體平臺。&#x1f464; 二、用戶角色分析用戶類…