
作者 | 吹牛Z
來源 | 數(shù)據(jù)不吹牛
原文 | Python數(shù)據(jù)分析實戰(zhàn)基礎(chǔ) | 清洗常用4板斧
首先,導(dǎo)入案例數(shù)據(jù)集。因為案例數(shù)據(jù)存放在同一個Excel表的不同Sheet下,我們需要指定sheetname分別讀?。?/span>
下面開始清洗的正餐。
01 增——拓展數(shù)據(jù)維度
1.1 縱向合并
這三個sheet的數(shù)據(jù),維度完全一致(每列數(shù)據(jù)都是一樣),縱向合并起來分析十分方便。說到縱向合并,concat大佬不請自來,他的招式簡單明了——pd.concat([表1,表2,表3]),對于列字段統(tǒng)一的數(shù)據(jù),我們只需把表依次傳入?yún)?shù):
concat大佬繼續(xù)說到:“其實把我參數(shù)axis設(shè)置成1就可以橫向合并.."說時遲那時快,我一個箭步?jīng)_上去捂住他的嘴巴“牛逼的人做好一件事就夠了,橫向的就交給merge吧~”
小Z溫馨提示:pandas中很多函數(shù)功能十分強大,能夠?qū)崿F(xiàn)多種功能,但對于萌新來說,過多甚至交叉的功能往往會造成懵B的狀態(tài),所以這里一種功能先只用一種方式來實現(xiàn)。
1.2 橫向合并
橫向合并涉及到連接問題,為方便理解,我們構(gòu)造一些更有代表性的數(shù)據(jù)集練手:
兩個DataFrame是兩張成績表,h1是5位同學(xué)的數(shù)學(xué)、英語、語文成績,h2是4位同學(xué)的籃球和舞蹈成績,現(xiàn)在想找到并合并兩張表同時出現(xiàn)的同學(xué)及其成績,可以用merge方法:
我們來詳解一下merge的參數(shù),left和rgiht分別對應(yīng)著需要連接的左表和右表,這里語數(shù)外成績表是左表,籃球、舞蹈成績是右表。
left_index與right_index是當(dāng)我們用索引(這兩個表的名字在索引中)連接時指定的參數(shù),設(shè)置為on表示用該表的索引作為連接的條件(或者說橋梁)。假設(shè)姓名是單獨的一列值,且需要根據(jù)姓名進行匹配,那就需要用“l(fā)eft_on = '姓名',right_on = '姓名'”,我們可以分別指定左表的匹配列和右表的匹配列。
how是指定連接方式,這里用的inner,表示我們基于姓名索引來匹配,只返回兩個表中共同(同時出現(xiàn))姓名的數(shù)據(jù)。下面詳解一下inner還涉及到的其他參數(shù)——left,right,outer。
左右連接(left和right):
左連接(left)和右連接(right),我們可以直觀理解為哪邊的表是老大,誰是老大,就聽誰的(所有行全部保持),先看左連接,左表h1原封不動,右邊根據(jù)左表進行合并,如果存在相關(guān)的名字,就正常返回數(shù)據(jù),如果不存在(韓梅梅、李雷),就返回空(NAN)值;右連接就是聽右表的,左表有則返回?zé)o則為空。
外連接(outer):
外連接是兩張表妥協(xié)的產(chǎn)物,我的數(shù)據(jù)全保留,你的也全保留,你有我無的就空著,你無我有的也空著。
02 刪——刪空去重
2.1 刪空
在一些場景,源數(shù)據(jù)的缺失(空值)對于分析來說是干擾項,需要系統(tǒng)的刪除。上文我們合并后的df數(shù)據(jù)集就是有缺失數(shù)據(jù)的:
要刪除空值,一個dropna即可搞定:
dropna函數(shù)默認(rèn)刪除所有出現(xiàn)空值的行,即只要一行中任意一個字段為空,就會被刪除。我們可以設(shè)置subset參數(shù),例如dropna(subset = ['city']),來指定當(dāng)一行中的city字段為空時,才會被刪除。
2.2 去重
說是講去重,但是案例數(shù)據(jù)比較干凈,沒有兩行數(shù)據(jù)是完全一樣的,所以我們要制造點困難,增加幾行重復(fù)值:
把源數(shù)據(jù)重復(fù)兩遍,賦值給repeat,這樣每一行數(shù)據(jù)都有重復(fù)的數(shù)據(jù)。要把重復(fù)數(shù)據(jù)刪掉,一行代碼就搞定:
drop_duplicates方法去重默認(rèn)會刪掉完全重復(fù)的行(每個值都一樣的行),如果我們要刪除指定列重復(fù)的數(shù)據(jù),可以通過指定subset參數(shù)來實現(xiàn),假如我們有個奇葩想法,要基于“流量級別”這列進行去重,則可以:
我們會發(fā)現(xiàn),流量有三個級別,通過指定subset參數(shù),我們刪除了這個字段重復(fù)的行,保留了各自不重復(fù)的第一行。繼續(xù)展開講,在源數(shù)據(jù)中,流量渠道為“一級”的有7行數(shù)據(jù),每行數(shù)據(jù)其他字段都不相同,這里我們刪除了后6行,只保留了第一行,但如果我們想在去重的過程中刪除前面6行,保留最后一行數(shù)據(jù)怎么操作?答案很簡單,指定keep參數(shù)即可。
keep值等于last,保留最后一行數(shù)據(jù),不輸入keep值時,系統(tǒng)默認(rèn)會給keep賦值為first,就會保留第一行數(shù)據(jù)而刪掉其他的。
03 查——基于條件查詢
查,不是單純的返回幾行數(shù)據(jù),而是根據(jù)業(yè)務(wù)實際需求,基于一定的條件查看和選擇數(shù)據(jù)。
3.1 按條件索引/篩選
loc獨白:你沒有看錯,哥的分量實在是太重了,所以又來搶個沙發(fā),刷個臉熟。
這次需求是篩選出訪客數(shù)大于10000的一級渠道,loc一下:
在行參數(shù)設(shè)置好同時滿足訪客數(shù)大于10000和流量級別等于“一級”這兩個條件即可。
3.2 排序
很多情況下,我們都需要通過排序來觀察數(shù)據(jù)規(guī)律,以及快速篩選出TOP N的數(shù)據(jù)項。對于案例數(shù)據(jù),我們怎么樣按交易金額進行排序并篩選出TOP3的渠道呢?
問題的關(guān)鍵就在于排序,這個時候sort_values函數(shù)就派上用場了:
整個操作十分簡單,sort_values函數(shù),顧名思義是按照數(shù)值進行排序,首先要傳入的參數(shù)是列參數(shù),即我們根據(jù)哪一列的數(shù)值來進行排序,ascending參數(shù)決定了排序順序,等于Flase則是從大到小的降序,設(shè)置為True則是升序。
排序完之后,篩選TOP3渠道就非常簡單:
補充一個知識點,如果跟著文章操作,會發(fā)現(xiàn)無論是刪空的dropna,還是去重的drop_duplicates,或者是排序的sort_values,在對源數(shù)據(jù)進行操作后,源數(shù)據(jù)并未改變,這是因為我們沒有對這幾個函數(shù)的inplace值進行設(shè)置,如果設(shè)置成inplace = True,刪空、去重和排序都會在源數(shù)據(jù)上生效。
但這里為了避免出現(xiàn)不必要的錯誤而無法更改,更建議大家把操作后的源數(shù)據(jù)賦值給新的變量,如new = df.dropna(),而不是將源數(shù)據(jù)的inplace參數(shù)設(shè)置為True。
04 分——分組和切分
話天下大勢,合久必分,數(shù)據(jù)亦是如此。在分組的版塊中,我們重點介紹groupby分組和cut切分。
4.1分組
在案例數(shù)據(jù)中,總的流量級別有三級,每一級下又有多個投放地區(qū),如果我們想?yún)R總看每個級別流量所對應(yīng)的總訪客數(shù)和支付金額,就需要用到分組了。
groupby是分組函數(shù),最主要的參數(shù)是列參數(shù),即按照哪一列或者哪幾列(多列要用列表外括)進行匯總,這里是按照流量級別:
可以看到,直接分組之后,沒有返回任何我們期望的數(shù)據(jù),要進一步得到數(shù)據(jù),需要在分組的時候?qū)ο嚓P(guān)字段進行計算(常用的計算方法包括sum、max、min、mean、std):
后面加上了sum,代表我們先按照流量級別進行分組,再對分組內(nèi)的字段求和。由于沒有指定求和的列,所以是對所有數(shù)值型字段進行了求和。此處我們只想要各級別流量下的訪客數(shù)和支付金額,需要指明參數(shù):
流量級別作為匯總的依據(jù)列,默認(rèn)轉(zhuǎn)化為索引列,如果我們不希望它變成索引,向groupby內(nèi)傳入?yún)?shù)as_index = False即可:
4.2 切分
切分(分桶)操作常用于一維數(shù)組的分類和打標(biāo),cut函數(shù)能夠高效的完成任務(wù)。它的主要參數(shù)和用法如下:
不要被復(fù)雜的解釋迷惑,一個例子就完全搞懂了。
以案例數(shù)據(jù)為例,每個渠道都有對應(yīng)的訪客數(shù),我們現(xiàn)在希望對各渠道訪客級、千級和萬級的渠道。
我們想對流量級別進行百、千、萬的歸類,所以把分組數(shù)值標(biāo)準(zhǔn)傳入bins參數(shù)。從結(jié)果可以看到,在不設(shè)置right的情況下,分組區(qū)間是默認(rèn)左開右閉的,而我們希望的是左閉右開,即百級流量渠道訪客數(shù)在0-99之間,所以需要將right值設(shè)置為False。
下面我們直接對分組后的數(shù)據(jù)進行打標(biāo),訪客數(shù)在0-99設(shè)置為“辣雞”,100-999設(shè)置為百級,千級和萬級以此類推,同時將打好標(biāo)簽的數(shù)據(jù)作為新列給到源
非常高效,一行半代碼就搞定了分組、判斷和打標(biāo)的過程。
總結(jié)
本文從增、刪、查、分四個模塊,分別介紹了橫向、縱向合并;刪空、去重;篩選、排序和分組、切分等數(shù)據(jù)清洗過程中的常見操作。在實際運用中,各操作往往是你中有我,我中有你,共同為了營造一個“干凈”的數(shù)據(jù)而努力。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10