真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python清洗數(shù)據(jù)的方法是什么

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

創(chuàng)新互聯(lián)專注于葫蘆島企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城系統(tǒng)網(wǎng)站開發(fā)。葫蘆島網(wǎng)站建設(shè)公司,為葫蘆島等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

把實(shí)際數(shù)據(jù)清洗場(chǎng)景下常用但零散的方法,按、、、四板斧的邏輯進(jìn)行歸類,以減少記憶成本,提升學(xué)習(xí)和使用效率。

數(shù)據(jù)集

一級(jí)流量

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

二級(jí)流量

流量級(jí)別投放地區(qū)訪客數(shù)支付轉(zhuǎn)化率客單價(jià)支付金額
二級(jí)A區(qū)29,11110.66%87.4271,189.23
二級(jí)B區(qū)17,16522.71%91.22355,662.39
二級(jí)C區(qū)8,8700.78%44.523,072.00

三級(jí)流量

流量級(jí)別投放地區(qū)訪客數(shù)支付轉(zhuǎn)化率客單價(jià)支付金額
三級(jí)A區(qū)45,05913.66%90.11554,561.22
三級(jí)B區(qū)2,13310.83%74.4817,204.50
三級(jí)C區(qū)8999.90%92.998,276.50
三級(jí)D區(qū)310.00%

三級(jí)E區(qū)170.00%

上述三個(gè)級(jí)別數(shù)據(jù)在同一個(gè)excel中不同Sheet中。

首先,導(dǎo)入案例數(shù)據(jù)集。因?yàn)榘咐龜?shù)據(jù)存放在同一個(gè)Excel表的不同Sheet下,我們需要指定sheetname分別讀?。?img src="/upload/otherpic71/231785.png" alt="Python清洗數(shù)據(jù)的方法是什么">
下面開始清洗的正餐。

1 增——拓展數(shù)據(jù)維度

1. 多行合并

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

溫馨提示:pandas中很多函數(shù)功能十分強(qiáng)大,能夠?qū)崿F(xiàn)多種功能,但對(duì)于萌新來說,過多甚至交叉的功能往往會(huì)造成懵B的狀態(tài),所以這里一種功能先只用一種方式來實(shí)現(xiàn)。

2. 多列合并

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

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

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

Python清洗數(shù)據(jù)的方法是什么
兩個(gè)DataFrame是兩張成績(jī)表,h2是5位同學(xué)的數(shù)學(xué)、英語(yǔ)、語(yǔ)文成績(jī),h3是4位同學(xué)的籃球和舞蹈成績(jī),現(xiàn)在想找到并合并兩張表同時(shí)出現(xiàn)的同學(xué)及其成績(jī),可以用merge方法:

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

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

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

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

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

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

2 刪——?jiǎng)h空去重

1. 刪空

在一些場(chǎng)景,源數(shù)據(jù)的缺失(空值)對(duì)于分析來說是干擾項(xiàng),需要系統(tǒng)的刪除。上文我們合并后的df數(shù)據(jù)集就是有缺失數(shù)據(jù)的:
Python清洗數(shù)據(jù)的方法是什么
要?jiǎng)h除空值,一個(gè)dropna即可搞定:
Python清洗數(shù)據(jù)的方法是什么

dropna函數(shù)默認(rèn)刪除所有出現(xiàn)空值的行,即只要一行中任意一個(gè)字段為空,就會(huì)被刪除。我們可以設(shè)置subset參數(shù),例如dropna(subset = ['city']),來指定當(dāng)一行中的city字段為空時(shí),才會(huì)被刪除。

2. 去重

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

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

3 查——基于條件查詢

查,不是單純的返回幾行數(shù)據(jù),而是根據(jù)業(yè)務(wù)實(shí)際需求,基于一定的條件查看和選擇數(shù)據(jù)。

1 按條件索引/篩選

loc獨(dú)白:你沒有看錯(cuò),哥的分量實(shí)在是太重了,所以又來?yè)寕€(gè)沙發(fā),刷個(gè)臉熟。
需求:是篩選出訪客數(shù)大于10000的一級(jí)渠道,loc一下:
Python清洗數(shù)據(jù)的方法是什么

2. 3.2 排序

很多情況下,我們都需要通過排序來觀察數(shù)據(jù)規(guī)律,以及快速篩選出TOP N的數(shù)據(jù)項(xiàng)。對(duì)于案例數(shù)據(jù),我們?cè)趺礃影唇灰捉痤~進(jìn)行排序并篩選出TOP3的渠道呢?

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

排序完之后,篩選TOP3渠道就非常簡(jiǎn)單:
Python清洗數(shù)據(jù)的方法是什么
補(bǔ)充一個(gè)知識(shí)點(diǎn),如果跟著文章操作,會(huì)發(fā)現(xiàn)無論是刪空的dropna,還是去重的drop_duplicates,或者是排序的sort_values,在對(duì)源數(shù)據(jù)進(jìn)行操作后,源數(shù)據(jù)并未改變,這是因?yàn)槲覀儧]有對(duì)這幾個(gè)函數(shù)的inplace值進(jìn)行設(shè)置,如果設(shè)置成inplace = True,刪空、去重和排序都會(huì)在源數(shù)據(jù)上生效

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

4 分——分組和切分

話天下大勢(shì),合久必分,數(shù)據(jù)亦是如此。在分組的版塊中,我們重點(diǎn)介紹groupby分組和cut切分。

1分組

在案例數(shù)據(jù)中,總的流量級(jí)別有三級(jí),每一級(jí)下又有多個(gè)投放地區(qū),如果我們想?yún)R總看每個(gè)級(jí)別流量所對(duì)應(yīng)的總訪客數(shù)和支付金額,就需要用到分組了。

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

2 切分

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

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

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

  3. right的值可以設(shè)置為True 或 False,當(dāng)為True時(shí)候表示分組區(qū)間是包含右邊,不包含左邊。等于False表示含左不含右。

  4. labels就是打標(biāo)參數(shù),我們把某列數(shù)據(jù)切分為3組,每一組給他們?cè)O(shè)置一個(gè)標(biāo)簽 比如[低,中,高]

不要被復(fù)雜的解釋迷惑,一個(gè)例子就完全搞懂了。以案例數(shù)據(jù)為例,每個(gè)渠道都有對(duì)應(yīng)的訪客數(shù),我們現(xiàn)在希望對(duì)各渠道訪客級(jí)別進(jìn)行評(píng)估,按照訪客數(shù)大小,分成辣雞(流量100以內(nèi)的)、百級(jí)、千級(jí)和萬級(jí)的渠道。Python清洗數(shù)據(jù)的方法是什么
因?yàn)槲覀兿雽?duì)流量級(jí)別進(jìn)行百、千、萬的歸類,所以把分組數(shù)值標(biāo)準(zhǔn)傳入bins參數(shù)。從結(jié)果可以看到,在不設(shè)置right的情況下,分組區(qū)間是默認(rèn)左開右閉的,而我們希望的是左閉右開,即百級(jí)流量渠道訪客數(shù)在0-99之間,所以需要將right值設(shè)置為False。

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

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

Python清洗數(shù)據(jù)的方法是什么

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

到此,關(guān)于“Python清洗數(shù)據(jù)的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!


文章名稱:Python清洗數(shù)據(jù)的方法是什么
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/psihdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部