全方位解讀pandas庫(kù)_第1頁(yè)
全方位解讀pandas庫(kù)_第2頁(yè)
全方位解讀pandas庫(kù)_第3頁(yè)
全方位解讀pandas庫(kù)_第4頁(yè)
全方位解讀pandas庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、說(shuō)到python與數(shù)據(jù)分析,那肯定少不了 pandas的身影,本文希望通過(guò)分析經(jīng)典的NBA數(shù)據(jù)集來(lái)系統(tǒng)的全方位講解pandas包,建議搭配IDE 一遍敲一邊讀哦。 話(huà)不多說(shuō),開(kāi)始吧!目錄安裝與數(shù)據(jù)介紹安裝與配置檢查數(shù)據(jù)探索性分析pandas數(shù)據(jù)結(jié)構(gòu)series對(duì)象dataframe 對(duì)象訪(fǎng)問(wèn)series元素使用索引使用.loc與.iloc訪(fǎng)問(wèn)dataframe元素使用索引使用.loc與.iloc查詢(xún)數(shù)據(jù)集分類(lèi)和匯總數(shù)據(jù)對(duì)列進(jìn)行操作指定數(shù)據(jù)類(lèi)型數(shù)據(jù)清洗數(shù)據(jù)可視化一、安裝與數(shù)據(jù)介紹pandas的安裝建議直接安裝anaconda,會(huì)預(yù)置安裝好所有數(shù)據(jù)分析相關(guān)的包,當(dāng) 然也可以使用pip安裝。$ pi

2、p install pandas既然是數(shù)據(jù)分析就肯定選擇jupyter notebook$ pip install jupyter接下來(lái)就可以進(jìn)入python使用pandas對(duì)數(shù)據(jù)進(jìn)行一些探索性的分析,將數(shù)據(jù)保存 在工作目錄,然后使用pd.read_csv()函數(shù)讀取。 import pandas as pd nba = pd.read_csv(nba_all_elo.csv) type(nba) #查看數(shù)據(jù)類(lèi)型再看看一共有多少數(shù)據(jù) len(nba)126314 nba.shape(126314, 23)現(xiàn)在我們知道數(shù)據(jù)集中有126,314行和23列。但是,如何確定數(shù)據(jù)集包含NBA的 哪些統(tǒng)計(jì)

3、數(shù)據(jù)?可以使用以下內(nèi)容查看前五行.head(): nba.head()ganeoniefgame id Ig.d iscopy year id ttaleganie wanganie is 食啪$ team kl Iraiijd . wit eq的 oap d cpp han osp jXs cfip01 194StlOlOTFH H牌,1 的1 岫10 TflK KfiWf8 .皿網(wǎng)瞰 WK Ku獨(dú) $3 1300.11 1946H010THH NBfl.11 知 11MM61D NYK KriCl . 417D517D FRH 耐俺 璃 1300.122 1ME11020CHS NBAD

4、W 111613 CM& Sts12&12257 MVK Kricksit 13D6:32 W11020CHS NEWT ;知 11/2/120 NVK KtIeIS .圳,威咬CMS 齡 63 l0.43NBi0 憤了 Ilfl.W1fl OTF FAorS .卯的啊 W3C 0雄礎(chǔ)M 1如Cu5wsjc2Joounns其中因?yàn)榱袛?shù)太多被隱藏了在jupyter notebook中可以看到,一共有23列變量,部分,那么怎樣可以看到這些變量呢 pd.set_option(display.max.columns,None)可以看到部分?jǐn)?shù)據(jù)小數(shù)點(diǎn)后面跟了6位,而對(duì)于分析來(lái)說(shuō)并沒(méi)有必要,所以我們調(diào) 整

5、為小數(shù)點(diǎn)后兩位 pd.set_option(display.precision,2)|檢查數(shù)據(jù)之前已經(jīng)使用Pandas Python庫(kù)導(dǎo)入了 CSV文件,并首先查看了數(shù)據(jù)集的 內(nèi)容。到目前為止,我們僅看到了數(shù)據(jù)集的大小及前幾行數(shù)據(jù)。接下來(lái)我們來(lái) 系統(tǒng)地檢查數(shù)據(jù)。使用以下命令顯示所有列及其數(shù)據(jù)類(lèi)型.info(): ()iL(|Rangelndexi 12(314 entries, 0 to 126313Data colm (total 2j colins):gair.eorderUBM noii-Dull LDt64gair_id126314 non-null ab

6、ject虬奇12&H4 HGD-oull object_iscopy12S3H uni-ull M陸4yBar_idU&JU lumDull intfii面 M_?me126114 noKOull abjectseasonje12&J14 o-ndl MiU6314 non-null Lot64team_M挪H non-null objecttran.idHGY4 ncdi-oull abjectpts15&314 non-nullelo_.i1261 扭 nor-oull floatselc_nURH non-null fLoatSCvia_eqiiir126314 non-null flo

7、at5叩匕id12E114 urn-null objectoppjrao12EH4objectoppjts126J14 o-Dllllopp_eh_iH珈 noii-oull floats叩 p_el)_D12&114 non-Dull floatfigairje_L3cation1M1強(qiáng) non-Dull objectgaif瀕 It1眼14 non-Dull objectforeca&t12&H4 O-DU11 flOBtUnotes54N Don-nuil objectdtyses: floats堆int64(7|r cbj鴕t(10| neircry usages 22J+ MB既然已

8、經(jīng)了解了數(shù)據(jù)集中的數(shù)據(jù)類(lèi)型,現(xiàn)在該概述每個(gè)列包含的值了???以使用.describe。: nba.describe()溫,遍crLte抑meM的一啷押r_id螂on啊訥佛知洲郵敝i曲叩iovead此Uli段皿1唧圳12631W1腳加圈1加miA1?跑侗1制皿囹也1暖拋12GS14.Kmm i蛔31.0015W恩田m瞰1順11.71m050m菇17.56Q24抽1懈iQ.a即1mi域D我nil1.K)4.01蛔m10.15ODO怖協(xié)i聊搬1待朋10moo職醐1礎(chǔ)MllttM.1C聊mm嬲31礎(chǔ)估醐O.OC偷監(jiān)版i駒依i耽s臨皿ODOm1制150岫1顧MHmOBJIB63WD0伽訕1印lafi.1

9、酬418S11C?1.111媚105L1C.describe ()默認(rèn)情況下僅分析數(shù)字列,但是如果使用include參數(shù),則可以提供 其他數(shù)據(jù)類(lèi)型: import numpy as np nba.describe(include二np.object)|探索性分析 接下來(lái)接著進(jìn)行對(duì)數(shù)據(jù)集的探索性相關(guān)分析 TOC o 1-5 h z nbateam_id.value_counts() BOS5997NYK5769LAL5078.SDS11 nbafran_id.value_counts()Name: team_id,Length: 104, dtype: int64Lakers6024Celtic

10、s5997Knicks5769.Huskies60Name: fran_id,dtype: int64可以看到含有隊(duì)名”Lakers”的隊(duì)伍打了 6024場(chǎng)比賽,但其中只有5078場(chǎng)是洛杉磯 湖人隊(duì)的比賽。找出另一個(gè)Lakers”團(tuán)隊(duì)是哪個(gè) nba.locnbafran_id = Lakers”, team_id.value_counts()LAL5078MNL 946Name: team_id, dtype: int64可以看到另一支湖人隊(duì)是明尼阿波利斯湖人(MNL)踢了 946場(chǎng)比賽。我 們甚至可以找出他們打比賽的時(shí)間: nba.locnbateam_id = MNL, date_game

11、.min() 1/1/1949 nba.locnbateam_id = MNL, date_game.max() 4/9/1959 nba.locnbateam_id = MNL, date_game.agg(min”, max)min1/1/1949max4/9/1959Name: date_game, dtype: object一、pandas的數(shù)據(jù)結(jié)構(gòu)盡管DataFrame提供的功能看起來(lái)非常直觀(guān),但是基本概念卻很難理解。因此,我 們將暫不使用龐大的NBA數(shù)據(jù),從頭開(kāi)始構(gòu)建一些較小的Pandas對(duì)象分析。Series對(duì)象Python最基本的數(shù)據(jù)結(jié)構(gòu)是list,這也是了解pandas.Se

12、ries對(duì)象的一個(gè) 很好的起點(diǎn)。Series是根據(jù)列表創(chuàng)建一個(gè)新對(duì)象,一個(gè)Series對(duì)象包含兩個(gè)組 件:值和索引 revenues = pd.Series(5555, 7000, 1980) revenues TOC o 1-5 h z 0555570001980dtype: int64可以分別使用.values和來(lái)訪(fǎng)問(wèn)這些組件.index。revenues.values 返回 中的值Series,而revenues.index返回位置索引。 revenues.values array(5555, 7000, 1980) revenues.indexRangeIndex(start=0, s

13、top=3, step=1)一個(gè)Series也可以具有任意類(lèi)型的索引。我們可以將此顯式索引視為特定 行的標(biāo)簽: city_revenues = pd.Series(.4200, 8000, 6500,.index=Amsterdam”, Toronto, Tokyo.) city_revenues TOC o 1-5 h z Amsterdam4200Toronto8000Tokyo6500dtype: int64以下是Series從Python字典構(gòu)造帶有標(biāo)簽索引的的方法: city_employee_count = pd.Series(Amsterdam”: 5, Tokyo: 8) ci

14、ty_employee_countAmsterdam5Tokyo8dtype: int64字典鍵成為索引,而字典值即為Series值。就像字典一樣,Series也支 持.keys()和in索引: city_employee_count.keys()Index(Amsterdam, Tokyo, dtype=object) Tokyo in city_employee_countTrue New York in city_employee_countFalseDataframe 對(duì)象按照之前的Series示例,現(xiàn)在已經(jīng)有兩個(gè)Series以城市為鍵的對(duì)象: city_revenues 和 city

15、_employee_count。我們可以 DataFrame 通過(guò)在構(gòu)造函數(shù)中 提供字典將這些對(duì)象組合為一個(gè)。字典鍵將成為列名,并且值應(yīng)包含Series對(duì)象: city_data = pd.DataFrame(一 一一 _?. revenue: city_revenues,employee_count: city_employee_count) city_datarevenue employee_countAmsterdam42005.0TokyoToronto65008.08000NaN注意到Pandas用NAN替換了 employee_count的缺失值。新DataFrame索引是兩個(gè)Se

16、ries索引的并集: city_data.indexIndex(Amsterdam, Tokyo, Toronto, dtype=object) 就像Series 一樣,DataFrame還將其值存儲(chǔ)在NumPy數(shù)組中: city_data.valuesarray(4.2e+03, 5.0e+00,6.5e+03, 8.0e+00,8.0e+03, nan)三、訪(fǎng)問(wèn)Series元素在上面的部分中,我們已經(jīng)介紹了 pandas的數(shù)據(jù)結(jié)構(gòu)。我們知道Series對(duì)象在幾 種方面與列表和字典的相似之處。也就意味著我們可以使用索引運(yùn)算符。現(xiàn)在我們 來(lái)說(shuō)明如何使用兩種特定于pandas的訪(fǎng)問(wèn)方法:.loc

17、和.iloc。使用.loc和.iloc 會(huì)發(fā)現(xiàn)這些數(shù)據(jù)訪(fǎng)問(wèn)方法比索引運(yùn)算符更具可讀性。因?yàn)樵谥暗奈恼轮幸呀?jīng)詳細(xì) 的介紹了這兩種方法,因此我們將簡(jiǎn)單介紹。更詳細(xì)的可以查看【公眾號(hào):早起 python】之前的文章。|使用索引運(yùn)算符我們先來(lái)訪(fǎng)問(wèn)重新city_ revenues 對(duì)象: city_revenues TOC o 1-5 h z Amsterdam4200Toronto8000Tokyo6500dtype: int64我們還可以Series通過(guò)標(biāo)簽和位置索引方便地訪(fǎng)問(wèn)中的值: city_revenuesToronto8000 city_revenues18000我們也可以使用負(fù)索引和切片

18、,就像使用列表一樣: city_revenues-16500 city_revenues1: TOC o 1-5 h z Toronto8000Tokyo6500dtype: int64 city_revenuesToronto:Toronto8000Tokyo6500dtype: int64| 使用.loc 和.iloc索引運(yùn)算符(口)很方便,但有一個(gè)警告。如果標(biāo)簽也是數(shù)字怎么辦?假 設(shè)我們必須使用如下Series對(duì)象則可以按照以下方法: colors = pd.Series(.red, purple”, blue”, green”, yellow,. index=1, 2, 3, 5, 8

19、.) colorsredpurpleblue5green8yellowdtype: object為了避免混淆,Pandas Python庫(kù)提供了兩種數(shù)據(jù)訪(fǎng)問(wèn)方法:.loc指標(biāo)簽索弓|o .iloc指位置索引。這將會(huì)數(shù)據(jù)訪(fǎng)問(wèn)方法更具可讀性: colors.loc1red colors.iloc1purplecolors.loc1返回red”帶有標(biāo)簽的元素1。colors.iloc1返回purple”帶有索引的元素1。下圖就顯示.loc與.ilo c引用了哪些元素:位置索引標(biāo)簽索引可以看出.loc指向圖像右側(cè)的標(biāo)簽索引。而iloc指向圖片左側(cè)的位置索引。四、訪(fǎng)問(wèn)DataFrame元素由于DataF

20、rame由一系列對(duì)象組成,所以可以使用相同的上面的方法來(lái)訪(fǎng)問(wèn)它的元 素。關(guān)鍵的區(qū)別是DataFrame還有一些附加維度。所以我們?cè)賹?duì)列使用索引操作符, 對(duì)行使用訪(fǎng)問(wèn)方法.loc和.iloc。|使用索引運(yùn)算符如果我們將DataFrame的值看成Series字典形式,則可以使用index運(yùn)算符訪(fǎng)問(wèn)它的列 city_datarevenue TOC o 1-5 h z Amsterdam4200Tokyo6500Toronto8000Name: revenue, dtype: int64 type(city_datarevenue)pandas.core.series.Series在這里,我們使用索引

21、運(yùn)算符選擇標(biāo)記為的列revenue”,但如果列名是字符串, 那么也可以使用帶點(diǎn)符號(hào)的屬性樣式訪(fǎng)問(wèn): city_data.revenue TOC o 1-5 h z Amsterdam4200Tokyo6500Toronto8000Name: revenue, dtype: int64在一些況下,使用DataFrame點(diǎn)符號(hào)訪(fǎng)問(wèn)元素可能無(wú)法正常工作或?qū)е乱?外。這是當(dāng)列名與DataFrame屬性或方法名重合時(shí): toys = pd.DataFrame(.name”: ball, shape: sphere,.name: Rubiks cube, shape: cube.) toysshape 0

22、sphere1 cubeName: shape, dtype: object toys.shape (2, 2)使用.loc和iloc類(lèi)似于Series, DataFrame還提供了 .loc和.iloc 數(shù)據(jù)訪(fǎng)問(wèn)方法。請(qǐng)記住,.loc 使用標(biāo)簽和.iloc位置索引 city_data.locAmsterdamrevenue4200.0employee_count 5.0 Name: Amsterdam, dtype: float64 city_data.locTokyo”: Toronto revenue employee_countTokyo 65008.0Toronto 8000NaN

23、city_data.iloc1revenue6500.0employee_count 8.0Name: Tokyo, dtype: float64那么更多的iloc和loc方法可以查看【公眾號(hào):早起python】之前的文章。五、查詢(xún)數(shù)據(jù)集現(xiàn)在我們已經(jīng)了解了如何根據(jù)索引訪(fǎng)問(wèn)大型數(shù)據(jù)集的子集?,F(xiàn)在,我們繼續(xù)基于數(shù) 據(jù)集列中的值選擇行以查詢(xún)數(shù)據(jù)。例如,我們可以創(chuàng)建一個(gè)DataFrame僅包含 2010年之后打過(guò)的比賽。 current_decade = nbanbayear_id 2010 current_decade.shape(12658, 23)仍然擁有全部23列,但新列DataFrame僅包

24、含其中列中的值year_id大于的行 2010。我們還可以選擇特定字段不為空的行: games_with_notes = nbanbanotes.notnull() games_with_notes.shape(5424, 23)我們接著搜索一下Baltimore兩隊(duì)得分都超過(guò)100分的比賽。為了每個(gè)比賽只看一 次,我們需要排除重復(fù): nba.(nba_iscopy=0) &.(nbapts 100)&.(nbaopp_pts 100) &.(nbateam_id=BLB).六、分類(lèi)和匯總數(shù)據(jù)我們接著學(xué)習(xí)pandas處理數(shù)據(jù)集的其他功能,例如一組元素的總和,均值或平均 值。幸運(yùn)的是,Panda

25、s庫(kù)提供了分組和聚合功能來(lái)幫助我們完成此任務(wù)。Series有二十多種不同的方法來(lái)計(jì)算描述性統(tǒng)計(jì)數(shù)據(jù)。這里有些例子: city_revenues.sum()18700 city_revenues.max()8000第一種方法返回的總和city_revenues,第二種方法返回的最大值。我們還可以使 用其他方法,例如.min()和.mean()。但是需要記住,DataFrame的列實(shí)際上是一 個(gè)Series對(duì)象。因此,我們可以在以下各列上使用這些相同的功能: points = nbapts type(points) points.sum()12976235一個(gè)DataFrame可以有多個(gè)列,其中介

26、紹了聚合的新的可能性,比如分組: nba.groupby(fran_id,sort二False)pts.sum() franidHuskies3995Knicks582497Stags20398Falcons3797Capitols22387還可以按多列分組: nba(nbafran_id = Spurs) &(nbayear_id 2010). .groupby(year_id, game_result)game_id.count()year_id game_result2011L25W632012L20W602013L30W732014L27W782015L31W58Name: game

27、id, dtype:七、對(duì)列進(jìn)行操作int64接下來(lái)要說(shuō)的是如何在數(shù)據(jù)分析過(guò)程的不同階段中操作數(shù)據(jù)集的列。我們可以在初 始數(shù)據(jù)清理階段添加列或刪除列,也可以稍后基于分析的見(jiàn)解來(lái)添加和刪除列。首 先創(chuàng)建原始副本DataFrame以使用: df = nba.copy() df.shape (126314, 23)然后基于現(xiàn)有列定義新列: dfdifference = df.pts - df.opp_pts df.shape(126314, 24)我們還可以重命名數(shù)據(jù)集的列。似乎game_result且game_location 太冗長(zhǎng),因 此將其重命名: renamed_df = df.renam

28、e(. columns=game_result: result, game_location:location.) renamed_()RangeIndex: 126314 entries, 0 to 126313Data columns (total 24 columns):gameorder126314 non-null int64.location result forecast notes difference126314 non-null object126314 non-null object126314 non-null float645424 non-null o

29、bject126314 non-null int64dtypes: float64(6), int64(8), object(10)memory usage: 23.1+ MB我們的數(shù)據(jù)集可能包含不需要的列。例如,對(duì)于某些人來(lái)說(shuō),Elo評(píng)分可能是一個(gè) 有趣的概念,但是本文不對(duì)其進(jìn)行分析。所以可以刪除與Elo相關(guān)的四列: df.shape(126314, 24) elo_columns = elo_i, elo_n, opp_elo_i, opp_elo_n df.drop(elo_columns, inplace二True, axis=1) df.shape(126314, 20)八、指定數(shù)據(jù)類(lèi)型當(dāng)DataFrame通過(guò)調(diào)用構(gòu)造函數(shù)或讀取CSV文件來(lái)創(chuàng)建new時(shí),Pandas會(huì)根據(jù)其 值將數(shù)據(jù)類(lèi)型分配給每一列。盡管它做得很好,但并不完美。如果我們?yōu)榱羞x擇正 確的數(shù)據(jù)類(lèi)型,則可以顯著提高代碼的性能。我們?cè)倏匆幌耼ba數(shù)據(jù)集的列: () dfdate_game = pd.to_datetime(dfdate_game)九、數(shù)據(jù)清洗在這里,我們就用.to_datetime()可以將所有游戲日期指定datetime對(duì)象。數(shù)據(jù)清洗主要是對(duì)空值與無(wú)效

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論