越洗越黑”的Pandas數據清洗

引言

先來一個腦筋急轉彎活躍一下枯燥工作日常,問:“什么東西越洗越黑?” 有沒有猜到的?猜不到我告訴你吧! 答案是“煤球”。那么這個腦機急轉彎跟我們要討論的話題有沒有關系呢?

嗯是的,還是沾點兒邊兒的。

我們經常在項目上生產線之前,肯定會先在測試服上進行測試,測試之前肯定會將垃圾數據清理掉,防止臟數據影響我們正常的測試邏輯。

在我們pyhton語言中,也提供了清理無用數據,進行數據清洗的庫Pandas, 確實也用了一下,封裝的方法的確挺好用,但也同時碰到了一些問題,接下來分享一下吧。

知道 😮

在正式分享之前,我們得先知道Pandas庫是干什么用的?它就是一個主要進行數據讀取,數據清理提供方法的這么一個庫。至于它的安裝方式,非常簡單👌,只要電腦安裝了Pyhton環境,那么我們就使用cmd小黑屏使用pip進行安裝即可。這里大概寫一下吧,pip install pandas。安裝完成以后,命令行進行查看是否安裝成功python -c "import pandas; print(pandas.__version__)"

關于Pandas庫是干什么的?如何安裝它,我們大概就說這么多,下面將探討我遇到的數據清洗的問題。

問題 😱

Pandas庫給我們提供非常豐富的數據🚿清洗的函數,其中我們用的多的大概就是 dropna() 函數了。

dropna()函數的格式是這樣的:DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)。其中axis:哪個軸(這個我們很熟悉了);how:設置整行還是所有;inplace:bool型,如果賦值為True的話,修改的是源數據。

我們淺淺的使用一下,實例代碼如下:

"""
@Created on : 2024/5/29 10:56
@creator : er_nao
@File :pandas_06_數據清洗.py
@Description :
"""
import pandas as pddf = pd.read_csv("../property-data.csv")print(df)
print('\n')
print(df['NUM_BEDROOMS'])
print('\n')
print(df['NUM_BEDROOMS'].isnull())
print('\n')
# 使用dropna刪除包含空數據的行
# 默認情況下,dropna() 方法返回一個新的 DataFrame,不會修改源數據
print('使用dropna刪除包含空數據的行')
new_df = df.dropna()
print(new_df.to_string())
print('\n')
print(df.to_string())# 如果你要修改源數據 DataFrame, 可以使用 inplace = True 參數:
print('\n')
print('使用 inplace = True')
df.dropna(inplace=True)
print(df.to_string())# 輸出結果#        PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0      PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0   LEXINGTON            N            3      1.5    --
# 2  100003000.0     NaN   LEXINGTON            N          NaN        1   850
# 3  100004000.0   201.0    BERKELEY           12            1      NaN   700
# 4          NaN   203.0    BERKELEY            Y            3        2  1600
# 5  100006000.0   207.0    BERKELEY            Y          NaN        1   800
# 6  100007000.0     NaN  WASHINGTON          NaN            2   HURLEY   950
# 7  100008000.0   213.0     TREMONT            Y            1        1   NaN
# 8  100009000.0   215.0     TREMONT            Y           na        2  1800
# 
# 
# 0      3
# 1      3
# 2    NaN
# 3      1
# 4      3
# 5    NaN
# 6      2
# 7      1
# 8     na
# Name: NUM_BEDROOMS, dtype: object
# 
# 
# 0    False
# 1    False
# 2     True
# 3    False
# 4    False
# 5     True
# 6    False
# 7    False
# 8    False
# Name: NUM_BEDROOMS, dtype: bool
# 
# 
# 使用dropna刪除包含空數據的行
#            PID  ST_NUM    ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0     PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0  LEXINGTON            N            3      1.5    --
# 8  100009000.0   215.0    TREMONT            Y           na        2  1800
# 
# 
#            PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0      PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0   LEXINGTON            N            3      1.5    --
# 2  100003000.0     NaN   LEXINGTON            N          NaN        1   850
# 3  100004000.0   201.0    BERKELEY           12            1      NaN   700
# 4          NaN   203.0    BERKELEY            Y            3        2  1600
# 5  100006000.0   207.0    BERKELEY            Y          NaN        1   800
# 6  100007000.0     NaN  WASHINGTON          NaN            2   HURLEY   950
# 7  100008000.0   213.0     TREMONT            Y            1        1   NaN
# 8  100009000.0   215.0     TREMONT            Y           na        2  1800
# 
# 
# 使用 inplace = True
#            PID  ST_NUM    ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0     PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0  LEXINGTON            N            3      1.5    --
# 8  100009000.0   215.0    TREMONT            Y           na        2  1800

我們可以看到,使用dropna()函數后,雖然會將有空值,NaN,na這些數據所在的行剔除掉🗑,個人認為這樣非常的不友好🙅?♂?,那么有其他辦法不剔除掉嗎?答案是有的。

Pandas庫還給我們提供了一個fillna函數 我們可以使用它將那些空值,NaN替換讓數據變得有意義。

"""
@Created on : 2024/5/29 10:56
@creator : er_nao
@File :pandas_06_數據清洗.py
@Description :
"""
import pandas as pddf = pd.read_csv("../property-data.csv")
print('源數據')
print(df)
print('\n')# 使用 mean() 方法計算列的均值并替換空單元格
print('使用fillna')
x = df['ST_NUM'].mean()
df['ST_NUM'].fillna(x, inplace=True)
print(df.to_string())# 輸出結果# 源數據
#            PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0      PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0   LEXINGTON            N            3      1.5    --
# 2  100003000.0     NaN   LEXINGTON            N          NaN        1   850
# 3  100004000.0   201.0    BERKELEY           12            1      NaN   700
# 4          NaN   203.0    BERKELEY            Y            3        2  1600
# 5  100006000.0   207.0    BERKELEY            Y          NaN        1   800
# 6  100007000.0     NaN  WASHINGTON          NaN            2   HURLEY   950
# 7  100008000.0   213.0     TREMONT            Y            1        1   NaN
# 8  100009000.0   215.0     TREMONT            Y           na        2  1800
# 
# 
# 使用fillna
#            PID      ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0  104.000000      PUTNAM            Y            3        1  1000
# 1  100002000.0  197.000000   LEXINGTON            N            3      1.5    --
# 2  100003000.0  191.428571   LEXINGTON            N          NaN        1   850
# 3  100004000.0  201.000000    BERKELEY           12            1      NaN   700
# 4          NaN  203.000000    BERKELEY            Y            3        2  1600
# 5  100006000.0  207.000000    BERKELEY            Y          NaN        1   800
# 6  100007000.0  191.428571  WASHINGTON          NaN            2   HURLEY   950
# 7  100008000.0  213.000000     TREMONT            Y            1        1   NaN
# 8  100009000.0  215.000000     TREMONT            Y           na        2  1800

大家可以看到,ST_NUM這一列計算了平均值,并且將之前的NaN也替換成了平均值。但是控制臺的打印真的是這樣嗎?請看下圖:

image.png

呀~~ 🦆🦆🦆 ,控制臺居然有報紅,我們程序員看到報紅腦子第一個閃現的念頭就是報錯了。數據清洗還給洗出BUG了?那清洗還有什么意義。

經過分析,這不是報錯,而是警告😡! 意思就是我們的寫法有問題唄。既然這樣,我們就遵從人家的提示,就改吧。

image.png

這兒的意思就是讓我們改成這種形式,好的。

image.png

咿?!神奇呦🧙。果然不爆紅了。那么這兩種寫法到底有什么區別呢?

a寫法: df.method({col: value}, inplace=True)

b寫法: df[col].method(value, inplace=True)

這其實就是一個鏈式賦值問題的問題,當使用b寫法的時候,Pandas它不知道到底是想在原始DataFrame上進行更改,還是想創建一個副本進行更改,所以就會引發我們控制臺的這個異常。

而a寫法它通常是對整個DataFrame應用一個方法,同時傳入一個列名與值的映射,指定要修改的列和相應的值。

作者:二鬧
鏈接:https://juejin.cn/post/7374243125458649124

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

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

相關文章

三相智能電表通過Modbus轉Profinet網關與PLC通訊案例

Modbus轉Profinet網關(XD-MDPN100/300)的主要功能是實現Modbus協議和Profinet協議之間的轉換和通信。Modbus轉Profinet網關集成了Modbus和Profinet兩種協議,支持Modbus RTU主站/從站,并可以與RS485接口的設備,它自帶網…

「前端+鴻蒙」核心技術HTML5+CSS3

1、CS架構與BS架構 CS架構(Client-Server):客戶端/服務器架構。用戶通過客戶端軟件與服務器進行交互,客戶端需要安裝特定的軟件才能訪問服務器上的資源。BS架構(Browser-Server):瀏覽器/服務器架構。用戶通過瀏覽器訪問服務器上的網頁,無需安裝額外的軟件,所有的交互都…

接口請求參數為文件時如何測試

方法 工具:Postman 步驟:①點擊body②點擊form-data③選擇key類型為fie ④輸入參數名⑤選擇參數上傳⑥發送請求

對稱二叉樹(oj題)

一、題目鏈接https://leetcode-cn.com/problems/symmetric-tree/ 二、題目思路 給你一個二叉樹的根節點 root , 檢查它是否軸對稱的思路: 1.將該樹的左子樹和右子樹,當做兩棵樹,調用 判斷兩棵樹是否對稱相等的函數 2.判斷兩顆樹是否對稱相…

告別低效提問:掌握BARD技巧,讓AI成為你的智能助手!

今天只聊一個主題:提示詞 Prompt。 說到提示詞,大家可能都看過GPT的高級示例,那些幾百字的提示詞,寫起來確實不容易。 那么,如何寫出同樣效果的提示詞呢? 有沒有什么公式或者系統學習的方法?…

在Linux/Ubuntu/Debian中使用lshw查看系統信息

在Linux/Ubuntu/Debian中使用lshw查看系統信息 lshw 是一個用于顯示硬件配置的命令,可以提供系統硬件的詳細信息,包括 CPU、內存、硬盤、主板等。該命令需要超級用戶權限來獲取詳細信息。 常見用法: 顯示所有硬件信息: sudo l…

木葉飛舞之【機器人ROS2】篇章_第三節、給turtlebot3安裝realsense深度相機

我們做視覺slam時會用到深度相機,但是gazebo的turtlebot3中只有rgb相機,沒有深度,因此本節會修改代碼,來給我們的小烏龜增加一個rgbd相機。 效果展示 發布topic如下圖 圖片大小都是640*480 1. 修改model.sdf文件 1.1 路徑位置…

射頻功率限幅器簡略

在功率輸入保護方面,限幅器是最好用的器件之一,可以保護后級電路不受超限功率的損害,限幅器其實像TVS功能一樣,讓超過閾值的功率釋放到接地上,來達到限制幅度的目的,目前限幅器的限幅幅度大多都大于15dBm,很…

啟智CV機器人,ROS, ubuntu 18.04

資料: https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 http://wiki.ros.org/melodic/Installation/Ubuntu https://github.com/6-robot/wpb_cv 一、安裝ros環境 裝VM。 裝ubuntu18.04 desktop.…

100道面試必會算法-27-美團2024面試第一題-前綴和矩陣

100道面試必會算法-27-美團2024面試第一題-前綴和矩陣 問題解讀 給定一個 n x n 的二進制矩陣,每個元素是 0 或 1。我們的任務是計算矩陣中所有邊長為 k 的子矩陣中,包含特定數量 1 的情況。例如,我們希望找到所有邊長為 k 的子矩陣中包含 k…

Java實現成績管理系統

1.思路分析實現 要求一和要求二,一個要求使用順序表一個使用鏈表,但又因為這兩個都是List的實現類,所以我就使用多態的形式通過一個方法進行實現上面兩種內容,需要用什么方法實現就傳入什么實現類,形參是List類型。創建…

【學習Day3】計算機基礎

?🏻記錄學習過程中的輸出,堅持每天學習一點點~ ??希望能給大家提供幫助~歡迎點贊👍🏻收藏?評論?🏻指點🙏 1.5.4 Cache替換算法 Cache的頁面淘汰算法 常用替換算法有: ? 隨機替換算法RA…

vue3 setup 使用 beforeRouteEnter 組件內路由守衛

vue3 setup 使用 beforeRouteEnter 組件內路由守衛 setup 中只有onBeforeRouteLeave、onBeforeRouteUpdate兩個鉤子函數&#xff0c; 沒有beforeRouteEnter對應的鉤子函數&#xff0c;所以無法在setup中直接使用 <script setup> onBeforeRouteLeave((to, from) > {// …

Android基礎-性能優化

在Android平臺上進行性能優化是確保應用程序高效、穩定且流暢運行的關鍵過程。以下將詳細闡述Android性能優化的各個方面&#xff0c;包括但不限于布局優化、繪制優化、內存管理、網絡優化、安裝包優化以及針對不同版本的Android系統進行適配等。 一、布局優化 布局優化的核心…

3D軟件開發的相關技術

3D開發涉及到廣泛的技術和工具&#xff0c;涵蓋了多個領域&#xff0c;包括計算機圖形學、編程、設計、物理模擬等。以下是3D開發中常用的技術和工具&#xff0c;掌握這些技術需要廣泛的知識和實踐&#xff0c;項目的成功依賴于對這些技術的有效整合和應用。北京木奇移動技術有…

音視頻開發14 FFmpeg 視頻 相關格式分析 -- H264 NALU格式分析

H264簡介-也叫做 AVC H.264&#xff0c;在MPEG的標準?是MPEG-4的?個組成部分–MPEG-4 Part 10&#xff0c;?叫Advanced Video Codec&#xff0c;因此常常稱為MPEG-4 AVC或直接叫AVC。 原始數據YUV,RGB為什么要壓縮-知道就行 在?視頻傳輸過程中&#xff0c;視頻?件的傳輸…

熱敏電阻的設計

熱敏電阻(NTC)的作用&#xff1a;抑制開機時的浪涌電流。防止開機瞬間產生的浪涌電流損壞后面的元件。 取值依據:根據對開機的脈沖電流&#xff08;浪涌電流&#xff09;小于多少A&#xff1f; 由,這個U是指最大輸入電壓&#xff0c;I為要求的浪涌電流。 NTC是負溫度系數的熱…

收銀系統源碼--商超水果生鮮店收銀硬件要怎么選擇?

新零售時代&#xff0c;越來越多的商家開始明白&#xff0c;除了要做好店鋪定位、店面裝潢和商品的設定&#xff0c;還要選購最適合店鋪運營需求的收銀機和硬件&#xff0c;好的收銀機和收銀系統可以幫助商家做好收支統計、庫存管理、人員配置。客戶服務等工作。現在的智能收銀…

MySQL 索引使用(二)

本篇繼續介紹有關索引的使用。 目錄 一、SQL提示 二、單列索引和聯合索引 三、覆蓋索引 四、前綴索引 五、索引的使用原則 一、SQL提示 我們在使用索引來進行查詢時&#xff0c;很有可能會出現一個字段中包含多個索引的情況&#xff0c;例如這里有一個name字段&#xff0c…

從零開始學習Slam-旋轉矩陣旋轉向量四元組(二)

本文參考&#xff1a;計算機視覺life 僅作筆記用 書接上回&#xff0c;上回不清不楚的介紹了旋轉矩陣&旋轉向量和四元組 現在回顧一下重點&#xff1a; 本著繞誰誰不變的變則 假設繞z軸旋轉θ&#xff0c;旋轉矩陣為&#xff1a; 再回顧一下旋轉向量的表示以及這個基本記不…