本篇內(nèi)容介紹了“Pandas的功能及用法”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
滕州網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,滕州網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為滕州上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的滕州做網(wǎng)站的公司定做!
做數(shù)據(jù)分析發(fā)現(xiàn)數(shù)據(jù)分析技能入門階段存在一個(gè)普遍性的問題,很多憑著興趣入坑的同學(xué),都能夠很快熟悉Python基礎(chǔ)語法,然后不約而同的一頭扎進(jìn)《利用Python進(jìn)行數(shù)據(jù)分析
》這本經(jīng)典之中,硬著頭皮啃完之后,好像自己什么都會(huì)了一點(diǎn),然而實(shí)際操作起來既不知從何操起,又漏洞百出。
江湖上流傳著這么一句話——分析不識(shí)潘大師(PANDAS),縱是老手也枉然。
Pandas是基于Numpy的專業(yè)數(shù)據(jù)分析工具,可以靈活高效的處理各種數(shù)據(jù)集,也是我們后期分析案例的神器。它提供了兩種類型的數(shù)據(jù)結(jié)構(gòu),分別是DataFrame和Series,我們可以簡(jiǎn)單粗暴的把DataFrame理解為Excel里面的一張表
,而Series就是表中的某一列
,后面學(xué)習(xí)和用到的所有Pandas騷操作,都是基于這些表和列進(jìn)行的操作(關(guān)于Pandas和Excel的形象關(guān)系,推薦張俊紅寫的《對(duì)比EXCEL,輕松學(xué)習(xí)Python數(shù)據(jù)分析》)。
這里有一點(diǎn)需要強(qiáng)調(diào),Pandas和Excel、SQL相比,只是調(diào)用和處理數(shù)據(jù)的方式變了,核心都是對(duì)源數(shù)據(jù)進(jìn)行一系列的處理,在正式處理之前,更重要的是謀定而后動(dòng),明確分析的意義,理清分析思路之后再處理和分析數(shù)據(jù),往往事半功倍。
在Pandas中我們想要構(gòu)造下面這一張表應(yīng)該如何操作呢?
別忘了,第一步一定是先導(dǎo)入我們的庫(kù)——import pandas as pd
構(gòu)造DataFrame最常用的方式是字典+列表,語句很簡(jiǎn)單,先是字典外括,然后依次打出每一列標(biāo)題及其對(duì)應(yīng)的列值(此處一定要用列表),這里列的順序并不重要:
import pandas as pdimport numpy as npprint(pd.__version__)df1 = pd.DataFrame({ '工資':[5000,7000,9000,8500],'績(jī)效分':[60,84,98,91],'備注':['不及格','良好','最佳','優(yōu)秀']}, index=['老王','小劉','小趙','老龔'])df1
左邊是jupyter notebook
中dataframe
的樣子,如果對(duì)應(yīng)到excel中,他就是右邊表格的樣子,通過改變columns,index和values的值來控制數(shù)據(jù)。PS
: 如果我們?cè)趧?chuàng)建時(shí)不指定index,系統(tǒng)會(huì)自動(dòng)生成從0開始的索引。
更多時(shí)候,我們是把相關(guān)文件數(shù)據(jù)直接讀進(jìn)PANDAS中進(jìn)行操作,這里介紹兩種非常接近的讀取方式,一種是CSV
格式的文件,一種是EXCEL
格式(.xlsx和xls后綴)的文件。
讀取csv文件:
df2 = pd.read_csv("/home/kg/liujinjie/phonebook/流量練習(xí)數(shù)據(jù).csv",engine="python")df2.head()
engine是使用的分析引擎,讀取csv文件一般指定python避免中文和編碼造成的報(bào)錯(cuò)。而讀取Excel文件,則是一樣的味道:
df2 = pd.read_exce.("/home/kg/liujinjie/phonebook/流量練習(xí)數(shù)據(jù).xls")df2.head()
非常easy,其實(shí)read_csv和read_excel還有一些參數(shù),比如header、sep、names等等,大家可以做額外了解。實(shí)踐中數(shù)據(jù)源的格式一般都是比較規(guī)整的,更多情況是直接讀取。
存儲(chǔ)起來一樣非常簡(jiǎn)單粗暴且相似:
df2.to_csv("/home/kg/liujinjie/phonebook/sowhat.csv")df3.to_excel("/home/kg/liujinjie/phonebook/sowhat.xlsx")
流量來源 | 來源明細(xì) | 訪客數(shù) | 支付轉(zhuǎn)化率 | 客單價(jià) |
---|---|---|---|---|
一級(jí) | -A | 35188 | 9.98% | 54.3 |
一級(jí) | -B | 28467 | 11.27% | 99.93 |
一級(jí) | -C | 13747 | 2.54% | 0.08 |
一級(jí) | -D | 5183 | 2.47% | 37.15 |
一級(jí) | -E | 4361 | 4.31% | 91.73 |
一級(jí) | -F | 4063 | 11.57% | 65.09 |
一級(jí) | -G | 2122 | 10.27% | 86.45 |
一級(jí) | -H | 2041 | 7.06% | 44.07 |
一級(jí) | -I | 1991 | 16.52% | 104.57 |
一級(jí) | -J | 1981 | 5.75% | 75.93 |
一級(jí) | -K | 1958 | 14.71% | 85.03 |
一級(jí) | -L | 1780 | 13.15% | 98.87 |
一級(jí) | -M | 1447 | 1.04% | 80.07 |
二級(jí) | -A | 39048 | 11.60% | 91.91 |
二級(jí) | -B | 3316 | 7.09% | 66.28 |
二級(jí) | -C | 2043 | 5.04% | 41.91 |
三級(jí) | -A | 23140 | 9.69% | 83.75 |
三級(jí) | -B | 14813 | 20.14% | 82.97 |
四級(jí) | -A | 216 | 1.85% | 94.25 |
四級(jí) | -B | 31 | 0.00% | |
四級(jí) | -C | 17 | 0.00% | |
四級(jí) | -D | 3 | 0.00% |
這里以我們的案例數(shù)據(jù)為例,迅速熟悉查看N行,數(shù)據(jù)格式概覽以及基礎(chǔ)統(tǒng)計(jì)數(shù)據(jù)。
很多時(shí)候我們想要對(duì)數(shù)據(jù)內(nèi)容做一個(gè)總覽,用df.head()
函數(shù)直接可以查看默認(rèn)的前5行
,與之對(duì)應(yīng),df.tail()
就可以查看數(shù)據(jù)尾部的5行數(shù)據(jù),這兩個(gè)參數(shù)內(nèi)可以傳入一個(gè)數(shù)值來控制查看的行數(shù),例如df.head(10)表示查看前10行數(shù)據(jù)。
df.info()
幫助我們一步摸清各列數(shù)據(jù)的類型,以及缺失情況:
df.describe()
快速計(jì)算數(shù)值型數(shù)據(jù)的關(guān)鍵統(tǒng)計(jì)指標(biāo),像平均數(shù)、中位數(shù)、標(biāo)準(zhǔn)差等等。
我們本來有5列數(shù)據(jù),為什么返回結(jié)果只有兩列?那是因?yàn)?code>這個(gè)操作只針對(duì)數(shù)值型的列。其中count是統(tǒng)計(jì)每一列的有多少個(gè)非空數(shù)值,mean、std、min、max對(duì)應(yīng)的分別是該列的均值、標(biāo)準(zhǔn)差、最小值和最大值,25%、50%、75%對(duì)應(yīng)的則是分位數(shù)。
這里,我們采用SQL四大法寶的邏輯來簡(jiǎn)單梳理針對(duì)列的基本處理方式——增、刪、選、改
。
溫馨提示
:使用Pandas時(shí),盡量避免用行或者EXCEL操作單元格的思維來處理數(shù)據(jù),要逐漸養(yǎng)成一種列向思維
,每一列是同宗同源,處理起來是嗖嗖的快,just like HBase。
增加一列,用df[‘新列名’] = 新列值的形式,在原數(shù)據(jù)基礎(chǔ)上賦值即可:
我們用drop
函數(shù)制定刪除對(duì)應(yīng)的列,axis = 1
表示針對(duì)列的操作,inplace
為True,則直接在源數(shù)據(jù)
上進(jìn)行修改,否則源數(shù)據(jù)會(huì)保持原樣。
想要選取某一列怎么辦?df[‘列名’]即可:
選取多列呢?需要用列表來傳遞:df[[‘第一列’,‘第二列’,‘第三列’…]]
好事多磨,復(fù)雜的針對(duì)特定條件和行列的篩選、修改,放在后面結(jié)合案例細(xì)講,這里只講一下最簡(jiǎn)單的更改:df[‘舊列名’] = 某個(gè)值或者某列值,就完成了對(duì)原列數(shù)值的修改。
字符串類型是最常用的格式之一了,Pandas中字符串的操作和原生字符串操作幾乎一毛一樣,唯一不同的是需要在操作前加上.str
。
提示
:我們最初用df2.info()
查看數(shù)據(jù)類型時(shí),非數(shù)值型的列都返回的是object格式
,和str類型深層機(jī)制上的區(qū)別就不展開了,在常規(guī)實(shí)際應(yīng)用中,我們可以先理解為object對(duì)應(yīng)的就是str格式
,int64對(duì)應(yīng)的就是int格式
,float64對(duì)應(yīng)的就是float格式即可
。
在案例數(shù)據(jù)中,我們發(fā)現(xiàn)來源明細(xì)那一列,可能是系統(tǒng)導(dǎo)出的歷史遺留問題,每一個(gè)字符串前面都有一個(gè)-
符號(hào),又丑又無用,所以把他給拿掉:
一般來說清洗之后的列是要替換掉原來列的:
數(shù)值型數(shù)據(jù),常見的操作是計(jì)算
,分為與單個(gè)值的運(yùn)算,長(zhǎng)度相等列的運(yùn)算。以案例數(shù)據(jù)為例,源數(shù)據(jù)訪客數(shù)我們是知道的,現(xiàn)在想把所有渠道的訪客都加上10000,怎么操作呢?
只需要選中訪客數(shù)所在列,然后加上10000即可,pandas自動(dòng)將10000和每一行
數(shù)值相加,針對(duì)單個(gè)值的其他運(yùn)算(減乘除)也是如此。
列之間的運(yùn)算語句也非常簡(jiǎn)潔。源數(shù)據(jù)是包含了訪客數(shù)、轉(zhuǎn)化率和客單價(jià),而實(shí)際工作中我們對(duì)每個(gè)渠道貢獻(xiàn)的銷售額更感興趣。(銷售額 = 訪客數(shù) X 轉(zhuǎn)化率 X 客單價(jià))
對(duì)應(yīng)操作語句:df[‘銷售額’] = df[‘訪客數(shù)’] * df[‘轉(zhuǎn)化率’] * df[‘客單價(jià)’]
但為什么瘋狂報(bào)錯(cuò)?
導(dǎo)致報(bào)錯(cuò)的原因,是數(shù)值型數(shù)據(jù)和非數(shù)值型數(shù)據(jù)相互計(jì)算導(dǎo)致的。PANDAS把帶%
符號(hào)的轉(zhuǎn)化率識(shí)別成字符串類型,我們需要先拿掉百分號(hào),再將這一列轉(zhuǎn)化為浮點(diǎn)型數(shù)據(jù):
要注意的是,這樣操作,把9.98%變成了9.98,所以我們還需要讓支付轉(zhuǎn)化率除以100,來還原百分?jǐn)?shù)的真實(shí)數(shù)值:
然后,再用三個(gè)指標(biāo)相乘計(jì)算銷售額:
PANDAS中時(shí)間序列相關(guān)的水非常深,這里只對(duì)日常中最基礎(chǔ)的時(shí)間格式進(jìn)行講解,對(duì)時(shí)間序列感興趣的同學(xué)可以自行查閱相關(guān)資料,深入了解。
以案例數(shù)據(jù)為例,我們這些渠道數(shù)據(jù),是在2019年8月2日提取的,后面可能涉及到其他日期的渠道數(shù)據(jù),所以需要加一列時(shí)間予以區(qū)分,在EXCEL中常用的時(shí)間格式是2019-8-3
或者2019/8/3
,我們用PANDAS來實(shí)現(xiàn)一下:
在實(shí)際業(yè)務(wù)中,一些時(shí)候PANDAS會(huì)把文件中日期格式的字段讀取為字符串格式,這里我們先把字符串2019-8-3
賦值給新增的日期列,然后用to_datetime()
函數(shù)將字符串類型
轉(zhuǎn)換成時(shí)間格式
:
轉(zhuǎn)換成時(shí)間格式(這里是datetime64)之后,我們可以用處理時(shí)間的思路高效處理這些數(shù)據(jù),比如,我現(xiàn)在想知道提取數(shù)據(jù)這一天離年末還有多少天(‘2020-12-31’),直接做減法(該函數(shù)接受時(shí)間格式的字符串序列,也接受單個(gè)字符串):
最后我們一起快速回顧下:
第一步,我們先了解PANDAS到底是個(gè)什么東西
。
第二步,學(xué)習(xí)如何構(gòu)建
、讀入存儲(chǔ)
數(shù)據(jù)。
第三步,拿到數(shù)據(jù)之后,怎么樣快速查看數(shù)據(jù)
。
第四步,對(duì)數(shù)據(jù)有了基礎(chǔ)了解,就可以進(jìn)行簡(jiǎn)單的增刪選改
了。
第五步,在了解基礎(chǔ)操作之后,對(duì)Pandas中基礎(chǔ)數(shù)據(jù)類型進(jìn)行了初步照面
。
“Pandas的功能及用法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!