




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、说到p ython与数据分析,那肯定少不了 pan das的身影,本文希望通过分析经 典的NBA数据集来系统的全方位讲解pan das包,建议搭配IDE 遍敲一边读哦。 话不多说,开始吧!目录?安装与数据介绍?安装与配置?检查数据?探索性分析? pan das数据结构? series 对象? dataframe 对象? 访问series 元素?使用索引? 使用.loc 与.iloc?访问 dataframe 元素?使用索引? 使用.loc 与.iloc?查询数据集?分类和汇总数据?对列进行操作?指定数据类型?数据清洗? 数据可视化一、安装与数据介绍pandas的安装建议直接安装anaconda
2、,会预置安装好所有数据分析相关的包,当 然也可以使用pip安装。$ pip in stall pan das既然是数据分析就肯定选择jupyter notebook$ pip in stall jupy ter接下来就可以进入python使用pan das对数据进行一些探索性的分析,将数据保存 在工作目录,然后使用pd.read_csv()函数读取。 import pan das as pd nba = p d.read_csv( nba_all_elo.csv) type(n ba) #查看数据类型再看看一共有多少数据 len(n ba)126314 n ba.sha pe(126314,
3、23)现在我们知道数据集中有126,314行和23列。但是,如何确定数据集包含 NBA的 哪些统计数据?可以使用以下内容查看前五行.head(): n ba.headOgneijid ig.id 制動 艸jd 删.事me NnoibgrK e.iMfoftt dbri k)细jl meqin oop.td oppijtwi 卿its opp0iD11.fl IMIBHNBAIFimNYK昭.2 leiOCHSNB4:H&2 ISeKEOeSNBft期NTKSlacs. _KrtCH匚41170aMi3?Khiq 牌130&IrmMVKKriciB4?130e.Wi3 iWfillOSODTPD
4、FPricortwscCDttso5*0*5x23 wunns中可以看到,一共有23列变量,其中因为列数太多被隐藏了在 jupyter notebook一部分,那么怎样可以看到这些变量呢 P d.set_o pti on (dis pl ay.max.colu mn s, None)可以看到部分数据小数点后面跟了6位,而对于分析来说并没有必要,所以我们调整为小数点后两位 P d.set_o pti on (dis play.p recisi on, 2)检查数据之前已经使用 Pan das Pyth on库导入了 CSV文件,并首先查看了数据集的 内容。到目前为止,我们仅看到了数据集的大小及前
5、几行数据。接下来我们来 系统地检查数据。使用以下命令显示所有列及其数据类型.in fo(): n ba.i nfo() fiwgeJncsex! L36IH entries; 0 to 12码 13 Data co Hum (total 21 coliznsj; ganeorder gone id M-id_iEcopyyear.id 曲诫血B5閱和码die isjlayotfs teamjd franjd pu ek ieIo_Ti viii_eqDiv Dpj.id opp.fnti OppjtE opf_e10Li Dppjlv 9趣 location gawjetult forecas
6、t notes12fi3U no卜null uol-oqH lOtigect 12册 1* flOR-null obijflct 13(314 noR-null iotfi mm nonnull Mi 123U noji-Qiill ohiject 1師!14 noK-oiill iDt64 1214 DOK-null bt騎 12314 DOMiill object lZbll4 Boc-nall object 1 捕4 Jioinoull iDL64 1 如如4 noc-niill fbste 1?时H MAMl】 floattJ 12314 aon-Diill float4 1”川 BM
7、ull object 12314 no口血 11 血昶rt 104 w-ottll int64 U砧i* noMUll nwt刖 1 歸14 DDL-oJl ilaat4 12於 11 uoK-oull Qbiject Bon-null object 12314 nMiill fb社胡 5垃4 D帥曲 11 objectdtypflS! float斶务血耐卩h object|lD| loory usage: 22 2+ MB既然已经了解了数据集中的数据类型,现在该概述每个列包含的值了。可 以使用.describe() : n ba.describeO.fSOWQjpifDctptsdoJI M
8、i MfUAWW OffJ 呻0lovast切1脚*2531111 12S?4.0Q卫册皿国姒旳很 1263H.D5*36SUflJ;9ODIIMIM1TJ1moa址悠诩i.s1国歯mM11却11加3盅nilm戦tt)Dm加唧川啣1M108).?0犯wwnDjImITOliiDmmO轴閤I1.Sniwms灘时空JB1M關瓷woo&!UQin1加MWTO1:200鮒m加0引kusooIO1W136.Wmi100WIG1851M.describe()默认情况下仅分析数字列,但是如果使用include 参:数,则可以提供其他数据类型: import numpy as np n ba.describe
9、(i nclude=np.o bject)探索性分析接下来接着进行对数据集的探索性相关分析 n bateam_id.value_co un ts()BOS 5997NYK 5769LAL 5078SDS 11 n bafra n_id.value_c oun ts()Name: team_id, Le ngth: 104, dty pe: int64602459975769LakersCelticsKni cksHuskies 60Name: fran_id, dtype: in t64可以看到含有队名Lakers的队伍打了 6024场比赛,但其中只有5078场是洛杉矶 湖人队的比赛。找出另二
10、个|Lakers订团队是哪个 nba.locnbafran_idLAL 5078MNL 946Name: team_id, dtype: in t64可以看到另一支湖人队是明尼阿波利斯湖人( 们甚至可以找出他们打比赛的时间:=Lakers,team_id.value_co un ts()MNL)踢了 946场比赛。我 nba.loc nbateam_id = MNL, date_game.mi n()1/1/1949 nba.loc nbateam_id = MNL, date_game.max()4/9/1959 nba.loc nbateam_id = MNL, date_game.agg
11、(mi n, max)min 1/1/1949max 4/9/1959Name: date game, dtype: object二、pandas的数据结构尽管DataFrame提供的功能看起来非常直观,但是基本概念却很难理解。因此,我 们将暂不使用庞大的NBA数据,从头开始构建一些较小的 Pandas对象分析。-Series对象Python最基本的数据结构是 list ,这也是了解pandas.Series 对象的一个 很好的起点。Series是根据列表创建一个新对象,一个Series对象包含两个组件:值和索引 reve nues = pd.Series(5555, 7000, 1980)
12、reve nues555570001980012 dty pe: in t64可以分别使用.values和来访问这些组件.index。revenues.values 返回中的值Series,而revenues.index返回位置索引。 reve nu es.values array(5555, 7000, 1980) reve nu es.i ndexRangein dex(start=O, stop=3, ste p=1)一个Series也可以具有任意类型的索引。我们可以将此显式索引视为特定 行的标签: city_reve nues = p d.Series(.4200, 8000, 650
13、0,.in dex=Amsterdam, Toro nto, Tokyo.) city_reve nuesAmsterdam 4200Toro nto8000Tokyo 6500dty pe: in t64以下是Series从Python字典构造带有标签索引的的方法: city_e mpio yee_c ount = p d.Series(Amsterdam: 5, Tokyo: 8) city_e mpio yee_c ountAmsterdam 5Tokyo 8dty pe: in t64字典键成为索引,而字典值即为Series值。就像字典一样,Series也支持.keys()和in索引:
14、 city_e mpio yee_c oun t.keys()In dex(Amsterdam, Tokyo, dtyp e=object) Tokyo in city_e mpIo yee_co untTrue New York i n city_e mpio yee_co untFalseDataframe 对象按照之前的Series示例,现在已经有两个 Series以城市为键的对象:city_revenues 禾R city_empioyee_count 。我们可以 DataFrame 通过在构造函数中提彳供字典将这些对象组合为一个。字典键将成为列名,并且值应包含Series对象: ci
15、ty data = pd.DataFrame(.reve nu e: city_reve nu es,.empio yee_c oun t: city_e mpio yee_co unt.) city datareve nue empio yee co unt5.08.0NaNAmsterdam 4200Tokyo6500Toro nto8000注意到Pan das用NAN替换了 emp loyee_cou nt的缺失值。新DataFrame索引是两个 Series索引的并集: city_data.i ndexIn dex(Amsterdam, Tokyo, Tor on to, dtyp e
16、=object)就像Series 一样,DataFrame还将其值存储在 NumPy数组中: city_data.values array(4.2e+03, 5.0e+00,6.5e+03, 8.0e+00,8.0e+03, nan)三、访问 Series 元素在上面的部分中,我们已经介绍了pan das的数据结构。我们知道 Series对象在几种方面与列表和字典的相似之处。也就意味着我们可以使用索引运算符。现在我们来说明如何使用两种特定于 pandas的访问方法:.loc和.iloc。使用.loc和.iloc 会发现这些数据访问方法比索引运算符更具可读性。因为在之前的文章中已经详细 的介绍了
17、这两种方法,因此我们将简单介绍。更详细的可以查看【公众号:早起 python】之前的文章。使用索引运算符我们先来访问重新city_reve nues 对象: city_reve nuesAmsterdam 4200Toronto 8000Tokyo 6500dty pe: in t64我们还可以 Series 通过标签和位置索引方便地访问中的值: city_reve nu esToro nto8000 city_reve nu es18000 _我们也可以使用负索引和切片,就像使用列表一样: city_reve nu es-16500 city reve nu es1:Toro nto 800
18、0Tokyo 6500dty pe: in t64 city_reve nu esToro nto:Toronto 8000Tokyo 6500dty pe: in t64使用.loc和.iloc索引运算符()很方便,但有一个警告。如果标签也是数字怎么办?假设我们必须使用如下 Series对象则可以按照以下方法: colors = p d.Senes(.red, pu rple, blue, gree n, yellow,.in dex=1,2, 3, 5, 8.)redpurpleblue colors12gree n yellow358 dtype: object为了避免混淆,Pandas
19、 Python库提供了两种数据访问方法:.loc指标签索 引。.iloc指位置索引。这将会数据访问方法更具可读性: colors.loc1red colors.iloc1返回red带有标签的元素1。colors.iloc1 返回purple带有索p urplecolors.loc1引的元素1。下图就显示.loc与.iloc引用了哪些元素:在这里,我们使用索引运算符选择标记为的列revenue,但如果列名是字符串,那么也可以使用带点符号的属性样式访问: city_data.reve nueAmsterdam 4200Tokyo 65002ilocfl 14可以看出.loc指向图像右侧的标签索弓I
20、。而Iloc 指向图片左侧的位置索引。四、访问DataFrame元素由于DataFrame由一系列对象组成,所以可以使用相同的上面的方法来访问它的元 素。关键的区别是 DataFrame还有一些附加维度。所以我们再对列使用索引操作符, 对行使用访问方法.loc和.iloc 。使用索引运算符女口果我们将DataFrame的值看成 Series 字典形式,则可以使用 index 运算符访问它的列 city_datareve nu eAmsterdam 4200Tokyo 6500Toronto 8000Name: reve nue, dtype: in t64 typ e(city_datarev
21、e nu e)pan das.core.series.SeriesToro nto8000Name: reve nue, dtype: in t64在一些况下,使用 DataFrame点符号访问元素可能无法正常工作或导致意 外。这是当列名与 DataFrame属性或方法名重合时: toys = P d.DataFrame(. name: ball, sha pe: s phere,. name: Rubiks cube, sha pe: cube.) toyssha pe0 sp here1 cubeName: sha pe, dtype: object toys.sha pe(2, 2)使用
22、.loc 和.iloc类似于Series,DataFrame还提供了 .loc和.iloc数据访问方法。请记住,.loc使用标签和.iloc位置索引 city_data.locAmsterdam reve nue 4200.0empio yee_co unt5.0Name: Amsterdam, dtype: float64 city_data.locTokyo: Toro nto reve nue empio yee_c ountTokyo 65008.0Toron to 8000 NaN city_data.iloc1reve nue 6500.0empioyee count8.0Name
23、: Tokyo, dtype: f 那么更多的iloc和lo 五、杳询数据集loat64c方法可以杳看【公众号:早起 Python】之前的文早。现在我们已经了解了如何根据索引访问大型数据集的子集。现在,我们继续基于数 据集列中的值选择行以查询数据。例如,我们可以创建一个DataFrame仅包含2010年之后打过的比赛。 curre nt_decade = n ba nbayear_id 2010 current decade.shape(12658, 23)仍然拥有全部23列,但新列DataFrame仅包含其中列中的值year_id大于的行 2010。我们还可以选择特定字段不为空的行: gam
24、es_with_ no tes = n ba nba no tes .notn ull() games_with_ no tes.sha pe(5424, 23)我们接着搜索一下Baltimore两队得分都超过100分的比赛。为了每个比赛只看一 次,我们需要排除重复: n ba(nba_iscopy二二 0) &(n ba pts 100) & 7(nbaopp_pts 100) &.(n bateam_id = BLB).六、分类和汇总数据我们接着学习pan das处理数据集的其他功能,例如一组元素的总和,均值或平均 值。幸运的是,Pan das库提供了分组和聚合功能来帮助我们完成此任 务。
25、Series有二十多种不同的方法来计算描述性统计数据。这里有些例子: city_reve nu es.sum()18700 city revenues.max()8000第一种方法返回的总和city_reve nues ,第二种方法返回的最大值。我们还可以使 用其他方法,例如.min()和.mean()。但是需要记住,DataFrame的列实际上是- 个Series对象。因此,我们可以在以下各列上使用这些相同的功能: points = n ba pts type(poin ts) poin ts.sum()12976235一个DataFrame可以有多个列,其中介绍了聚合的新的可能性,比女口分
26、组: n ba.gro up by(fra n id, sort=False)” pts.sum() fran_idHuskies Kni cks Stags Falc ons3995 582497 20398 3797Cap itols 22387还可以按多列分组: n ba.(n bafran_id = Sp urs) &.(n bayear_id 2010). .gro up by(year_id, game_result)game_id.co unt() year_id game_result256320603073277831582011 LW2012 LW2013 LW2014 L
27、W2015 LWName: game_id, dtype: in t64七、对列进行操作接下来要说的是如何在数据分析过程的不同阶段中操作数据集的列。我们可以在初始数据清理阶段添加列或删除列,也可以稍后基于分析的见解来添加和删除列。首先创建原始副本 DataFrame以使用: df = n ba.c opy() df.sha pe(126314, 23)然后基于现有列定义新列: dfdiffere nee = df.pts - df.o pp_pts df.sha pe (126314, 24)我们还可以重命名数据集的列。似乎 game_result且game_location |太冗长,因此将
28、其重命名: ren amed_df = df.re name(. colu mn s=game_result: result, game_locatio n: location) ren amed_df.i nfo() df.sha pe(126314, 24) elo colu mns = elo i, elo n, op p elo i, op p elo n df.dr op( elo_c olumns, inp lace=True, axis=1) df.sha pe(126314, 20)八、指定数据类型当DataFrame通过调用构造函数或读取 CSV文件来创建new时,Pan d
29、as会根据其 值将数据类型分配给每一列。尽管它做得很好,但并不完美。如果我们为列选择正 确的数据类型,则可以显着提高代码的性能。我们再看一下nba数据集的列: df.i nfo()Kangelndex: 126314 entries, 0 to 126313Data coluiims(total 23 columns 1:gameorder126314 non-null intUgame id126314 non-iiEll objectlg_id126314 non-null object_iscopy126314 non-null iiit64year id126314 non-nnll
30、int64date_gaiHe126314 non-null objectseasongame126314 non-null int64is_playoffs126314 non-null int64teain_id126311 non-null objectfran_id126314 non-null objectpts1263H non-null int6iel0_i126314 non-null float64eLo_n126314 non-null float64win equiv125314 non-null float64opp-id126314 non-null objectop
31、p fran126314 non-null objectoppjts126314 non-null int64opp_eloi126314 non-null flo眈64Opp elo n126314 non-null float64gamejocation126314 non-null objectgawejesuLt126314 non-null objectforecast126314 non-null floaternotes5424 non-null objectdtypes: fLoat64(6), int64(7)f object(10)memory usage:22.2+ MS有十列具有数据类型Object。这些object |列中的大多数包含任意文本,但是也有 一些数据类型转换的候选对象。例如,查看以下列 date_game: dfdate_game = p d.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南省长沙市雨花区雅礼实验毓秀学校2024-2025学年七年级下学期期末考试数学试题(含部分答案)
- 2025年江苏省镇江市句容二中中考物理一模试卷-自定义类型(含答案)
- 酒店委托会议合同范本
- 包含运费协议合同范本
- 雪糕陈列合同范本
- 社区护士基础知识培训课件
- 木工外包生产合同范本
- 楼顶房租合同范本
- 酒店用车协议合同范本
- 社区居务监督培训课件
- 交通事故护工合同范本
- T/CECS 10103-2020用于水泥和混凝土中的铅锌、铁尾矿微粉
- T/CCASC 4003.1-2022氯碱工业成本核算方法第1部分:氢氧化钾
- 消防接警考试题及答案
- 2024年高级消防员技能鉴定考前必刷必练题库500题(含真题、必会题)
- 2025年中国TPU环保薄膜市场调查研究报告
- 《智能客服运营管理》课件
- 管网工程施工组织设计与管理
- 幼儿园开学园长会议发言稿模版
- 2025年大学辅导员选拔考试题库:学生综合素质评价体系评价方法试题
- 现场仪表知识培训课件
评论
0/150
提交评论