Python學習筆記29:進階篇(十八)常見標準庫使用之質量控制中的數據清洗

前言

本文是根據python官方教程中標準庫模塊的介紹,自己查詢資料并整理,編寫代碼示例做出的學習筆記。

根據模塊知識,一次講解單個或者多個模塊的內容。

教程鏈接:https://docs.python.org/zh-cn/3/tutorial/index.html

質量控制

質量控制(Quality Control, QC),主要關注于提高代碼質量、確保數據準確性和程序穩定性。

數據質量

數據質量是指數據滿足其預定用途所要求的準確性、完整性、一致性、及時性和有效性的程度。良好的數據質量是數據分析、決策支持以及模型訓練等過程成功的基礎。把控數據質量主要包括以下幾個方面:

數據質量的要素:

  1. 準確性:數據是否正確無誤,沒有錯誤或偏差。
  2. 完整性:數據集中是否存在缺失值或丟失的信息。
  3. 一致性:數據內部及跨數據集之間是否存在矛盾或不匹配。
  4. 時效性:數據是否是最新的,能否反映當前狀況。
  5. 有效性:數據是否符合預期的格式和范圍,如日期格式正確、數值在合理范圍內。
  6. 唯一性:記錄是否有重復。
  7. 可追溯性:數據的來源和變更歷史是否清晰可查。

如何把控數據質量:

  1. 數據驗證規則:定義一套數據驗證規則,比如字段格式、范圍限制、唯一性約束等,并在數據輸入時或定期進行檢查。
  2. 數據清洗:使用Python中的Pandas等庫進行數據清洗,包括處理缺失值、去除重復數據、糾正錯誤數據等。
  3. 數據質量報告:定期生成數據質量報告,包括數據概況、缺失值統計、異常值檢測等,以便監控數據質量變化。
  4. 自動化檢查:利用腳本或工具自動化執行數據質量檢查任務,提高效率并減少人為錯誤。
  5. 數據治理:建立數據治理框架,明確數據責任人,制定數據管理策略和流程,確保數據從源頭到應用的每個環節都有質量控制。
  6. 用戶反饋循環:鼓勵數據使用者反饋數據問題,建立快速響應機制,及時修正數據錯誤。
  7. 持續監控:實施數據質量監控系統,對關鍵指標進行實時或定期監控,一旦發現數據質量問題立即報警并采取措施。

通過上述方法,可以在Python中有效地把控數據質量,確保數據分析和決策基于可靠的數據基礎之上。

數據清洗

數據清洗是數據預處理的關鍵步驟,旨在識別并糾正數據集中的錯誤、不完整、不準確或無關的部分,以提升數據質量,確保后續分析或建模的準確性。
在Python中,數據清洗通常借助pandas庫完成。

示例
  1. 打開文件,read_xxx()。常用的入參就是文件路徑和編碼,如過有用到其他參數的用法,臨時再學就好了。
import pandas as pd# 打開一個名為"test.csv"的文件,沒有就新建一個,我就是新建的
df = pd.read_csv('test.csv', encoding='gbk')

pd模塊中還有很多read開頭的函數,自行嘗試。

在這里插入圖片描述

  1. head(n=5)函數:獲取指定行數信息
    這個函數可以獲取你拿到的數據的指定行數的部分,默認值是五。

    # 讀取一下文件的信息,打印1行試試
    print(df.head(1))
    

    這是打印出的數據 在這里插入圖片描述
    這是文件內容,注意我們的是csv文件,從Alice開始的才算是正式的數據
    在這里插入圖片描述
    再換成打印3行試試,因為我們數據就3行
    在這里插入圖片描述
    可以看到,數據全部打印了,前面有012,這個很好理解,我不多解釋了。

  2. info()函數:獲取數據信息
    函數用于展示DataFrame(簡單理解為就是我們打開的數據)的結構、類型和內存使用情況。

    使用起來很簡單,直接調用就好了。

    參數說明

    • verbose:默認為None,如果設置為True或False,將覆蓋pd.options.display.max_info_columns的設置,控制是否打印所有列的詳細信息。如果DataFrame的列數超過max_info_columns,默認行為是僅顯示前后的部分列。
    • buf:默認為sys.stdout,指定輸出信息的目標,可以是一個文件對象或者具有write()方法的任何對象。
    • max_cols:控制在詳細輸出中顯示的最大列數。如果DataFrame的列數超過這個值,且verbose未被顯式設置,那么將顯示簡略的摘要而非所有列的詳情。默認值來自pd.options.display.max_info_columns。
    • memory_usage:控制是否顯示DataFrame及其索引的內存使用情況。可以是布爾值(True/False),或者字符串"deep"。"deep"會更深入地計算內存使用,包括嵌套結構的內存。默認情況下,僅顯示內存使用情況的摘要。
    • null_counts:在pandas的新版本中,此參數已被移除,因為現在默認總是顯示非空值的數量。

    返回值
    info()函數本身不返回任何值,而是直接打印輸出到控制臺或指定的緩沖區。輸出內容通常包括:

    • DataFrame的總行數和列數。
    • 每列的名稱、非空值數量、數據類型。
    • 索引的類型和非空值數量。
    • 如果設置了memory_usage=True或memory_usage=‘deep’,還會顯示DataFrame及其索引的內存使用量。
    print(df.info())
    

    在這里插入圖片描述
    稍微解釋一下:

    • 類信息:<class ‘pandas.core.frame.DataFrame’> 表明df是一個pandas的DataFrame對象。
    • 索引范圍:RangeIndex: 3 entries, 0 to 2 表示DataFrame有3行數據,索引是從0到2的整數序列。
    • 數據列詳情:
    • 列出了每一列的名稱(Column)、非空值的數量(Non-Null Count)以及數據類型(Dtype)。
    • 列1 (Name):3個非空值,數據類型為object(通常表示字符串)。
    • 列2 (Age):3個非空值,數據類型為int64(整數)。
    • 列3 (City):3個非空值,數據類型為object(通常表示字符串)。
    • 數據類型匯總:dtypes: int64(1), object(2) 總結了DataFrame中各數據類型的列數。這里說明有1列是int64類型,2列是object類型。
    • 內存使用:memory usage: 204.0+ bytes 表示該DataFrame占用的大約內存大小。注意這里的“+”表明計算可能不是完全精確的,特別是當使用memory_usage='deep’時,但對于估計內存消耗很有幫助。
    • 結尾的None:這是因為df.info()函數實際上沒有返回值(返回None),它直接將信息輸出到控制臺。當你在Python腳本或交互式環境中 調用print(df.info())時,最終的None是由print函數打印出來的,表示df.info()執行完畢并沒有返回任何可供打印的實際內容。
  3. isnull()函數:獲取缺失值對象

    print(df.isnull)
    

    這個函數會返回一個和原來數據結構相同但是為布爾值的對象,通過這個對象,我們可以對數據中的缺失值進行操作。

    簡單修改一下原來的數據。

    在這里插入圖片描述

    通過isnull函數,我們可以明確看到哪一行哪一列有缺失值,通過sum函數,我們可以明確知道的哪一列缺失了幾個值。

    在這里插入圖片描述

    通過前后幾次的輸出對比,可以明顯發現我們已經將name一列的缺失值補充上去,并且為我們設置的值x。

    最后輸出框中出現一堆紅色的告警,提示的是關于鏈式賦值(chained assignment)和 inplace 操作的問題。pandas 3.0版本中,這種通過鏈式賦值進行的inplace操作可能不再有效,因為中間對象可能被視為原對象的一個副本,而不是原對象本身。
    為了避免這個警告并確保代碼在未來版本的pandas中也能正常工作,您可以按照警告的建議采用以下兩種方式之一:df.method({col: value}, inplace=True)或者df[col] = df[col].method(value)。

    換成我們的代碼就是

    # 方法1
    df.fillna({'Name': "x"}, inplace=True)
    # 方法2
    df['Name'] = df['Name'].fillna("x")
    
  4. dropna()函數:刪除有缺失值的行

    # 直接刪除含有缺失值的行
    df.dropna(inplace=True)
    

    在這里插入圖片描述

  5. drop_duplicates()函數:刪除重復數據

    df.drop_duplicates(inplace=True)
    

    在這里插入圖片描述

  6. astype()函數:類型轉換

    	# 將某列轉換為整型
    df['column_name'] = df['column_name'].astype(int)
    

    在這里插入圖片描述
    注意如果列有缺失值,可能會導致轉換失敗,別問我怎么知道的。

  7. 文本數據清洗:.str

    # 去除空格
    df['text_column'] = df['text_column'].str.strip()
    # 大小寫
    df['text_column'] = df['text_column'].str.lower()
    

    這個就不單獨運行了,看函數名就知道啥作用

  8. replace()函數:替換特定值

    df['column_name'].replace('old_value', 'new_value', inplace=True)
    

    在這里插入圖片描述

數據清洗的方法還有很多,想寫完不太可能,寫一些常用的簡單的認知一下即可。

結尾

數據質量不止數據清洗這一項,還有其他很多項,但是基本都是配合著一起來的。這里只是初步認知,不需要講那么多。大概都了解了,就進到項目那一塊去,等你寫出一個項目,比如一個小游戲后,成就感足以讓你繼續向下努力學習了,這里太深入講只會浪費熱情,耐心。

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

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

相關文章

基于單片機的防酒駕控制系統設計

摘 要&#xff1a; 酒后駕車的危害十分巨大&#xff0c;因此&#xff0c;筆者介紹了一種基于單片機的防酒駕控制系統。系統由酒精傳感器 MQ-3測量汽車駕駛員體內的酒精含量濃度&#xff0c;通過 A/D 轉換器轉換成數字信號傳給單片機&#xff0c;經過單片機處理后顯示酒精濃度&a…

c++11新特性-6-using

文章目錄 using1.定義別名 using 1.定義別名 1.1 定義類型別名 using t int; 1.2 定義函數指針 int test(double,string){}//返回值類型 int &#xff0c;參數類型&#xff1a;double string using func int(*) (double,string);int main() {func f test;f(10.5,“hello…

算法訓練營day69

查并集&#xff1a;107. 尋找存在的路徑 (kamacoder.com) #include<iostream> #include<vector>using namespace std;vector<int> father(101, 0);void init() {for(int i 1;i < 101;i) {father[i] i;} }int find(int v) {if(v father[v]) return v;e…

老年生活照護實訓室:為養老服務業輸送專業人才

本文探討了老年生活照護實訓室在養老服務業專業人才培養中的關鍵作用。通過詳細闡述實訓室的功能、教學實踐、對學生能力的培養以及面臨的挑戰和解決方案&#xff0c;強調了其在提升人才素質、滿足行業需求方面的重要性&#xff0c;旨在為養老服務業的可持續發展提供有力的人才…

electron教程(二)控制應用程序的事件生命周期

1.will-finish-launching 當應用程序完成基礎的啟動的時候被觸發&#xff0c;在 Windows 和 Linux 中, will-finish-launching 事件與 ready 事件是相同的; 在 macOS 中&#xff0c;這個事件相當于 NSApplication 中的 applicationWillFinishLaunching 提示。 app.on(will-fi…

Butterfly主題文章標題改成轉動小風車

效果 標題級別不同小風車顏色不同&#xff0c;鼠標移入會有轉動變慢及變色效果。 新建css 建議在/source下創建諸如img/css/js等文件夾&#xff0c;存放文章或網站用的素材&#xff0c;分門別類后續也方便維護。 Hexo打包的時候&#xff0c;會自動把/source下的文件&#…

深度神經網絡語言識別

「AI秘籍」系列課程&#xff1a; 人工智能應用數學基礎人工智能Python基礎人工智能基礎核心知識人工智能BI核心知識人工智能CV核心知識 使用 DNN 和字符 n-gram 對一段文本的語言進行分類&#xff08;附 Python 代碼&#xff09; 資料來源&#xff0c;flaticon&#xff1a;htt…

AI繪畫如何變現賺取副業收入?保姆級AI繪畫SD和MJ副業實操教程建議收藏!

hi~大家好&#xff0c;我是向陽。 今天給大家分享一下我是如何通過AI繪畫賺到一點小錢的&#xff01; 副業做個人IP&#xff0c;某書&#xff0c;專注Midjourney &#xff0c;深入 AI頭像制作&#xff0c;小某書做了500頭像&#xff0c;變現了差不多一萬元&#xff0c;每日短…

[qt][C++]object.h(448): error C2238: 意外的標記位于“;”之前

問題場景&#xff1a;此問題多發生在qt調用python.h&#xff0c;比如matplotlib-cpp等需要python引用的C庫 #include <Python.h>報錯 \python\python37-32\include\object.h(448): error C2059: 語法錯誤:“;” \python\python37-32\include\object.h(448): error C223…

鴻蒙開發:Universal Keystore Kit(密鑰管理服務)【生成密鑰(C/C++)】

生成密鑰(C/C) 以生成ECC密鑰為例&#xff0c;生成隨機密鑰。具體的場景介紹及支持的算法規格。 注意&#xff1a; 密鑰別名中禁止包含個人數據等敏感信息。 開發前請熟悉鴻蒙開發指導文檔&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點擊或者復…

【C語言】五子棋(c語言實現)

這里寫目錄標題 最終效果菜單打印函數棋盤的初始化和打印人人對戰落子判空函數悔棋函數判勝負函數人人對戰 人機對戰一是將直接調用rand生成隨機值&#xff0c;這就不可控二是根據棋子贏面來判斷哪里落子最好 如果選擇退出程序直接exit就行主函數調用邏輯源代碼 最終效果 五子棋…

‘艾’公益——微笑行動「廣安站」為艾祝福,讓笑起舞

艾多美“微笑行動”廣安站拉開帷幕 此次愛心幫助7名唇腭裂患兒 重新綻放微笑 艾多美“微笑行動”廣安站拉開帷幕 此次愛心幫助7名唇腭裂患兒 重新綻放微笑 不讓笑容留有缺憾 每個孩子都有微笑的權利 艾多美向唇腭裂兒童伸出援手 綻放笑容&#xff0c;擁抱全新的未來 2…

進程、程序、應用程序之間的關系

文章目錄 進程和程序進程和應用程序總結參考資料 進程和程序 程序&#xff1a;程序是存放在硬盤中的可執行文件&#xff0c;主要包括代碼指令和數據。程序本身是一個靜態的文件&#xff0c;只有在被操作系統加載到內存中并執行時才會變成進程。 進程&#xff1a;進程是程序在…

衛星軌道平面簡單認識

目錄 一、軌道平面 1.1 軌道根數 1.2 應用考慮 二、分類 2.1 根據運行高度 2.2 根據運行軌跡偏心率 2.3 根據傾角大小 三、衛星星座中的軌道平面 四、設計軌道平面的考慮因素 一、軌道平面 1.1 軌道根數 軌道平面是定義衛星或其他天體繞行另一天體運動的平面。這個平…

第十六章 Qt的文件處理操作詳解

目錄 一、基本文件操作 二、二進制文件讀寫 三、文本文件讀寫 四、操作例子 1、QTextStream的流操作符 一、基本文件操作 文件操作是應用程序必不可少的部分。Qt 作為一個通用開發庫,提供了跨平臺的文件操作能力。在所有的 I/O 設備中,文件 I/O 是最重要的部分之…

TF-IDF和BM25原理和區別

TF-IDF TF-IDF是TF&#xff08;詞頻&#xff0c;Term Frequency&#xff09;和IDF&#xff08;逆文檔頻率&#xff0c;Inverse Document Frequency&#xff09;的乘積。我們先來看他們分別是怎么計算的&#xff1a; TF的計算有多種方式&#xff0c;常見的是 除以文章總詞數是…

從CPU的視角看C++的構造函數和this指針

從匯編角度&#xff0c;清晰的去看構造函數和this指針到底是個什么東西呢&#xff1f;也許可以解決你的一點小疑問 首先寫一個很簡單的代碼demo&#xff1a; class A{ public:int a;A(){;}void seta(int _a){a_a;}A* getA(){return this;} };int fun1(int px){return px; }in…

【FreeRTOS】同步互斥與通信 有缺陷的同步示例

目錄 1 同步互斥與通信1.1 同步互斥與通信概述1.2 同步與互斥的概念1.3 同步的例子&#xff1a;有缺陷1.4 freertos.c源碼3. 互斥的例子&#xff1a;有缺陷4. 通信的例子&#xff1a;有缺陷5. FreeRTOS的解決方案 1 同步互斥與通信 1.1 同步互斥與通信概述 參考《FreeRTOS入門…

搞錢四步:干活、出名、破圈、整合

搞錢這事兒&#xff0c;說起來有四步&#xff1a;干活、出名、破圈、整合。 咱們現在這個時代&#xff0c;誰要是能把自尊心放一邊&#xff0c;勇敢站到舞臺上展示才華&#xff0c;變現那是分鐘的事兒。 只要你敢承認自己想要財富&#xff0c;并且不停地使用正確的方法論&…