中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python清洗數據的方法是什么

發布時間:2021-12-08 09:40:24 來源:億速云 閱讀:145 作者:iii 欄目:大數據

這篇文章主要介紹“Python清洗數據的方法是什么”,在日常操作中,相信很多人在Python清洗數據的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python清洗數據的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

把實際數據清洗場景下常用但零散的方法,按四板斧的邏輯進行歸類,以減少記憶成本,提升學習和使用效率。

數據集

一級流量

流量級別投放地區訪客數支付轉化率客單價支付金額
一級A區44,30011.78%58.79306,887.83
一級B區30,61213.85%86.64367,338.10
一級C區18,3892.50%0.28129.58
一級D區4,50910.73%64.1231,035.14
一級E區3,7695.73%92.9120,068.20
一級F區2,42422.07%89.3347,791.60
一級G區2,4128.21%56.0411,096.42

二級流量

流量級別投放地區訪客數支付轉化率客單價支付金額
二級A區29,11110.66%87.4271,189.23
二級B區17,16522.71%91.22355,662.39
二級C區8,8700.78%44.523,072.00

三級流量

流量級別投放地區訪客數支付轉化率客單價支付金額
三級A區45,05913.66%90.11554,561.22
三級B區2,13310.83%74.4817,204.50
三級C區8999.90%92.998,276.50
三級D區310.00%

三級E區170.00%

上述三個級別數據在同一個excel中不同Sheet中。

首先,導入案例數據集。因為案例數據存放在同一個Excel表的不同Sheet下,我們需要指定sheetname分別讀取:Python清洗數據的方法是什么
下面開始清洗的正餐。

1 增——拓展數據維度

1. 多行合并

這三個sheet的數據,維度完全一致(每列數據都是一樣),縱向合并起來分析十分方便。說到縱向合并,concat大佬不請自來,他的招式簡單明了 pd.concat([表1,表2,表3]),對于列字段統一的數據,我們只需把表依次傳入參數:Python清洗數據的方法是什么
concat大佬繼續說到:其實把我參數axis設置成1就可以橫向合并 說時遲那時快,我一個箭步沖上去捂住他的嘴巴,牛逼的人做好一件事就夠了,橫向的就交給merge吧~!

溫馨提示:pandas中很多函數功能十分強大,能夠實現多種功能,但對于萌新來說,過多甚至交叉的功能往往會造成懵B的狀態,所以這里一種功能先只用一種方式來實現。

2. 多列合并

橫向合并涉及到連接問題,為方便理解,我們構造一些更有代表性的數據集練手:

h2 = pd.DataFrame({
   
   
   '語文':[93,80,85,76,58],'數學':[87,99,95,85,70],'英語':[80,85,97,65,88]},index=['韓梅梅','李雷','李華','王明','鐵蛋'])h2 

h3 = pd.DataFrame({
   
   
   '籃球':[93,80,85,76],'舞蹈':[87,99,95,85]},index=['李華','王明','鐵蛋','劉強'])h3

Python清洗數據的方法是什么
兩個DataFrame是兩張成績表,h2是5位同學的數學、英語、語文成績,h3是4位同學的籃球和舞蹈成績,現在想找到并合并兩張表同時出現的同學及其成績,可以用merge方法:

pd.merge(left=h2,right=h3,left_index=True,right_index=True,how='inner')也可以指定 左右表關聯的字段哦
data = pd.merge(left=intopiece_label, right=intopiece_pr, how="inner", left_on="order_number",right_on="order_number")

Python清洗數據的方法是什么
我們來詳解一下merge的參數,leftrgiht分別對應著需要連接的左表和右表,這里語數外成績表是左表,籃球、舞蹈成績是右表。

left_indexright_index是當我們用索引(這兩個表的名字在索引中)連接時指定的參數,設置為on表示用該表的索引作為連接的條件(或者說橋梁)。假設姓名是單獨的一列值,且需要根據姓名進行匹配,那就需要用·left_on = ‘姓名’,right_on = '姓名·,我們可以分別指定左表的匹配列和右表的匹配列。

how是指定連接方式,這里用的inner,表示我們基于姓名索引來匹配,只返回兩個表中共同(同時出現)姓名的數據。下面詳解一下inner還涉及到的其他參數——leftrightouter

左右連接(left和right):
Python清洗數據的方法是什么
左連接(left)和右連接(right),我們可以直觀理解為哪邊的表是老大,誰是老大,就聽誰的(所有行全部保持),先看左連接,左表h2原封不動,右邊根據左表進行合并,如果存在相關的名字,就正常返回數據,如果不存在(韓梅梅、李雷),就返回空(NAN)值;右連接就是聽右表的,左表有則返回無則為空。

外連接(outer):
Python清洗數據的方法是什么
外連接是兩張表妥協的產物,我的數據全保留,你的也全保留,你有我無的就空著,你無我有的也空著。跟SQL中的操作幾乎類似。

2 刪——刪空去重

1. 刪空

在一些場景,源數據的缺失(空值)對于分析來說是干擾項,需要系統的刪除。上文我們合并后的df數據集就是有缺失數據的:
Python清洗數據的方法是什么
要刪除空值,一個dropna即可搞定:
Python清洗數據的方法是什么

dropna函數默認刪除所有出現空值的行,即只要一行中任意一個字段為空,就會被刪除。我們可以設置subset參數,例如dropna(subset = ['city']),來指定當一行中的city字段為空時,才會被刪除。

2. 去重

drop_duplicates() 說是講去重,但是案例數據比較干凈,沒有兩行數據是完全一樣的,所以我們要制造點困難,增加幾行重復值:
Python清洗數據的方法是什么

Python清洗數據的方法是什么
drop_duplicates 方法去重默認會刪掉完全重復的行(每個值都一樣的行),如果我們要刪除指定列重復的數據,可以通過指定subset參數來實現,假如我們有個奇葩想法,要基于流量級別這列進行去重,則可以:
Python清洗數據的方法是什么
我們會發現,流量有三個級別,通過指定subset參數,我們刪除了這個字段重復的行,保留了各自不重復的第一行。繼續展開講,在源數據中,流量渠道為一級的有7行數據,每行數據其他字段都不相同,這里我們刪除了后6行,只保留了第一行,但如果我們想在去重的過程中刪除前面6行,保留最后一行數據怎么操作?答案很簡單,指定keep參數即可。
Python清洗數據的方法是什么
keep值等于last,保留最后一行數據,不輸入keep值時,系統默認會給keep賦值為first,就會保留第一行數據而刪掉其他的。

3 查——基于條件查詢

查,不是單純的返回幾行數據,而是根據業務實際需求,基于一定的條件查看和選擇數據。

1 按條件索引/篩選

loc獨白:你沒有看錯,哥的分量實在是太重了,所以又來搶個沙發,刷個臉熟。
需求:是篩選出訪客數大于10000的一級渠道,loc一下:
Python清洗數據的方法是什么

2. 3.2 排序

很多情況下,我們都需要通過排序來觀察數據規律,以及快速篩選出TOP N的數據項。對于案例數據,我們怎么樣按交易金額進行排序并篩選出TOP3的渠道呢?

問題的關鍵就在于排序,這個時候sort_values函數就派上用場了:Python清洗數據的方法是什么
整個操作十分簡單,sort_values函數,顧名思義是按照數值進行排序,首先要傳入的參數是列參數,即我們根據哪一列的數值來進行排序,ascending參數決定了排序順序,等于Flase則是從大到小的降序,設置為True則是升序。

排序完之后,篩選TOP3渠道就非常簡單:
Python清洗數據的方法是什么
補充一個知識點,如果跟著文章操作,會發現無論是刪空的dropna,還是去重的drop_duplicates,或者是排序的sort_values,在對源數據進行操作后,源數據并未改變,這是因為我們沒有對這幾個函數的inplace值進行設置,如果設置成inplace = True,刪空、去重和排序都會在源數據上生效

但這里為了避免出現不必要的錯誤而無法更改,更建議大家把操作后的源數據賦值給新的變量,如new = df.dropna(),而不是將源數據的inplace參數設置為True。跟Scala 還有Spark的 機制類似。

4 分——分組和切分

話天下大勢,合久必分,數據亦是如此。在分組的版塊中,我們重點介紹groupby分組和cut切分。

1分組

在案例數據中,總的流量級別有三級,每一級下又有多個投放地區,如果我們想匯總看每個級別流量所對應的總訪客數和支付金額,就需要用到分組了。

groupby是分組函數,最主要的參數是列參數,即按照哪一列或者哪幾列(多列要用列表外括)進行匯總,這里是按照流量級別:
Python清洗數據的方法是什么
可以看到,直接分組之后,沒有返回任何我們期望的數據,要進一步得到數據,需要在分組的時候對相關字段進行計算(常用的計算方法包括sum、max、min、mean、std):Python清洗數據的方法是什么
后面加上了sum,代表我們先按照流量級別進行分組,再對分組內的字段求和。由于沒有指定求和的列,所以是對所有數值型字段進行了求和。此處我們只想要各級別流量下的訪客數和支付金額,需要指明參數:
Python清洗數據的方法是什么
流量級別作為匯總的依據列,默認轉化為索引列,如果我們不希望它變成索引,向groupby內傳入參數as_index = False即可:
Python清洗數據的方法是什么

2 切分

切分(分桶)操作常用于一維數組的分類打標,cut函數能夠高效的完成任務。它的主要參數和用法如下:

pd.cut(x,bins,right,labels)
  1. 第一個參數x是我們要傳入跟切分的一維數組,可以是列表,也可以是DataFrame的一列

  2. bins表示切分方式,可以自定義傳入列表[a,b,c] 表示按照a-b-c區間進行切分,也可以輸入數值(比如5)直接將數據分成5份。

  3. right的值可以設置為True 或 False,當為True時候表示分組區間是包含右邊,不包含左邊。等于False表示含左不含右。

  4. labels就是打標參數,我們把某列數據切分為3組,每一組給他們設置一個標簽 比如[低,中,高]

不要被復雜的解釋迷惑,一個例子就完全搞懂了。以案例數據為例,每個渠道都有對應的訪客數,我們現在希望對各渠道訪客級別進行評估,按照訪客數大小,分成辣雞(流量100以內的)、百級、千級和萬級的渠道。Python清洗數據的方法是什么
因為我們想對流量級別進行百、千、萬的歸類,所以把分組數值標準傳入bins參數。從結果可以看到,在不設置right的情況下,分組區間是默認左開右閉的,而我們希望的是左閉右開,即百級流量渠道訪客數在0-99之間,所以需要將right值設置為False。

下面我們直接對分組后的數據進行打標,訪客數在0-99設置為辣雞,100-999設置為百級,千級和萬級以此類推,同時將打好標簽的數據作為新列給到源數據:

df['分類標簽'] = pd.cut(x=df['訪客數'],bins=[0,100,1000,10000,100000],right=False,labels=['垃圾','百級','千級','萬級'])

Python清洗數據的方法是什么

非常高效,一行半代碼就搞定了分組、判斷和打標的過程。

到此,關于“Python清洗數據的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

河津市| 托克托县| 东明县| 青川县| 友谊县| 项城市| 鱼台县| 长子县| 关岭| 习水县| 遵义县| 增城市| 天柱县| 克东县| 黄浦区| 正蓝旗| 平乡县| 东兴市| 秭归县| 酉阳| 黄浦区| 来安县| 临夏市| 通许县| 尚志市| 东阿县| 博白县| 安顺市| 旺苍县| 泾川县| 甘孜| 巩留县| 宽城| 托克逊县| 连云港市| 仙居县| 泽州县| 吴堡县| 龙口市| 偏关县| 泌阳县|