热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用pandas进行数据分析(一):Series和DataFrame数据结构

对于Python而言,坊间早有这种说法:在有了pandas之后,Python才算有了数据分析的能力。在此之前,要想用Python来做数据分析,可能就没那么友好了,可见pandas在



对于Python而言,坊间早有这种说法:在有了 pandas 之后,Python才算有了数据分析的能力。在此之前,要想用Python来做数据分析,可能就没那么友好了,可见 pandas 在学习数据分析时候的重要程度。对于 pandas 来说,很多功能的实现也是要基于科学计算库 numpy 的,所以 numpy + pandas 的组合在Python数据分析中就显得尤为关键。


从本篇开始,小编就给大家详细讲解 pandas 的基本用法和应用案例,熟悉R的朋友们也可以将其与R的数据分析功能进行对比,定能有所收获。本篇先对 pandas 的数据结构进行介绍,跟R大不相同的是,Python并没有太多不同的数据结构和对象, pandas 中主要包括 SeriesDataFrame 两种数据结构。


Series


Series 有点类似于 numpy 中的一维数组对象,一般由一组数据和数据相关的标签或者索引构成,由一组数构成最简单的 Series 如下:



  1. from numpy import *


  2. from pandas import *



创建 Series



  1. obj = Series([-1,3,-4,6])


  2. print(obj)


  3. 0   -1


  4. 1    3


  5. 2   -4


  6. 3    6


  7. dtype: int64



可以看到的是,由一组数创建的 Series 对象索引在左边,值在右边。我们也可以通过索引和值标签分别访问相应的对象:



  1. #Series对象值


  2. obj.values


  3. array([-1,  3, -4,  6], dtype=int64)


  4. #Series对象索引


  5. obj.index


  6. RangeIndex(start=0, stop=4, step=1)



当然,我们可以在创建Series对象的时候就对索引进行标记或者命名:



  1. #对Series索引进行命名或者标记


  2. obj2 = Series([-1,3,-4,6],index = ['a','b','c','d'])


  3. print(obj2)


  4. a   -1


  5. b    3


  6. c   -4


  7. d    6


  8. dtype: int64


  9. #查看索引


  10. obj2.index


  11. Index(['a', 'b', 'c', 'd'], dtype='object')



根据 Series 索引访问对象值:



  1. obj2['a']


  2. -1


  3. obj2[['a','b','c']]


  4. a   -1


  5. b    3


  6. c   -4


  7. dtype: int64



也可以对Series对象进行数组运算:



  1. obj2[obj2 > 0]


  2. b    3


  3. d    6


  4. dtype: int64


  5. obj2*2


  6. a    -2


  7. b     6


  8. c    -8


  9. d    12


  10. dtype: int64


  11. np.exp(obj2)


  12. a      0.367879


  13. b     20.085537


  14. c      0.018316


  15. d    403.428793


  16. dtype: float64



除了直接以数组形式创建 Series 对象之外,通过字典来生成 Series 也是较为普遍的做法:



  1. nba = {'Kobe Bryant':30.3,'Allen Iverson':29.4,'Tracy McGrady':30.1,'Vince Carter':25.6}


  2. obj3 = Series(nba)


  3. print(obj3)


  4. Allen Iverson    29.4


  5. Kobe Bryant      30.3


  6. Tracy McGrady    30.1


  7. Vince Carter     25.6


  8. dtype: float64



创建完之后可以对 Series 对象和索引进行命名:



  1. obj3.name = 'nbastats'


  2. obj3.index.name = 'player'


  3. print(obj3)


  4. player


  5. Allen Iverson    29.4


  6. Kobe Bryant      30.3


  7. Tracy McGrady    30.1


  8. Vince Carter     25.6


  9. Name: nbastats, dtype: float64



另外, Series 索引可以随时进行更改:



  1. obj3.index = ['A.Iverson','K.Bryant','T.McGrady','V.Carter']


  2. print(obj3)


  3. A.Iverson    29.4


  4. K.Bryant     30.3


  5. T.McGrady    30.1


  6. V.Carter     25.6


  7. Name: nbastats, dtype: float64



除了上述创建 Series 对象的方法以外,从 DataFrame 中单独拿出一行也可以用来创建 Series 。关于 Series 数据结构的基本内容就介绍到这里,下面看 DataFrame


DataFrame


说到 DataFrame ,可能大家更熟悉的是R语言中的 data.frame ,Python中的 DataFrame 跟它也较为类似。在Python中, DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列的数据类型可以不一样,与R中的数据框相比,Python中的 DataFrame 行列操作较为平衡。 构建DataFrame方法很多,最常用的是直接传入一个由等长列表或NumPy数组组成的字典:



  1. data = {'city':['LAL','HOU','PHI','TOR'],


  2.        'year':[1996,1997,1996,1997],


  3.        'score':[30.3,30.1,29.4,25.6]}


  4. frame = DataFrame(data)


  5. frame


  6.    city    score   year


  7. 0    LAL 30.3    1996


  8. 1    HOU 30.1    1997


  9. 2    PHI 29.4    1996


  10. 3    TOR 25.6    1997



可以看到,字典在转化为数据框的过程中,键是作为列名而存在的。



  1. #按指定列进行排列


  2. DataFrame(data,columns=['year','city','score'])


  3.    year    city    score


  4. 0    1996    LAL 30.3


  5. 1    1997    HOU 30.1


  6. 2    1996    PHI 29.4


  7. 3    1997    TOR 25.6



根据字典传入时,若是指定列找不到数据则会自动填补为缺失:



  1. #若传入的列找不到数据则会产生NA


  2. frame2 = DataFrame(data,columns=['year','city','score','assist'],


  3.                   index=[1,2,3,4])


  4. print(frame2)


  5.  year city  score assist


  6. 1  1996  LAL   30.3    NaN


  7. 2  1997  HOU   30.1    NaN


  8. 3  1996  PHI   29.4    NaN


  9. 4  1997  TOR   25.6    NaN



如前述,我们可以通过 data.frame 来获取一个 Series 对象:



  1. frame2['city']


  2. 1    LAL


  3. 2    HOU


  4. 3    PHI


  5. 4    TOR


  6. Name: city, dtype: object


  7. frame2.score


  8. 1    30.3


  9. 2    30.1


  10. 3    29.4


  11. 4    25.6


  12. Name: score, dtype: float64



也可以通过 loc 方法访问 DataFrame 的行:



  1. frame2.loc[3]


  2. year      1996


  3. city       PHI


  4. score     29.4


  5. assist     NaN


  6. Name: 3, dtype: object



对缺失的变量进行重新赋值:



  1. frame2['assist']=5.6


  2. print(frame2)


  3. year city  score  assist


  4. 1  1996  LAL   30.3     5.6


  5. 2  1997  HOU   30.1     5.6


  6. 3  1996  PHI   29.4     5.6


  7. 4  1997  TOR   25.6     5.6



按索引传入时,没有被指定的记录产生缺失:



  1. val = Series([4.5,3.9],index=[1,4])


  2. frame2['assist']=val


  3. print(frame2)


  4. year city  score  assist


  5. 1  1996  LAL   30.3     4.5


  6. 2  1997  HOU   30.1     NaN


  7. 3  1996  PHI   29.4     NaN


  8. 4  1997  TOR   25.6     3.9



对于嵌套字典转化为 DataFrame ,一般外层字典的键作为列,内层字典的键作为行索引:



  1. nba = {'kobe':{2005:35.6,2006:32.1},'McGrady':{2005:26.7,2006:24.3}}


  2. frame3 = DataFrame(nba)


  3. print(frame3)


  4. McGrady  kobe


  5. 2005     26.7  35.6


  6. 2006     24.3  32.1



关于 pandas 的两种基本数据结构 SeriesDataFrame ,小编就暂且介绍到这里了,关于如何在实际的数据分析过程熟练使用这两种数据结构的基本操作,小编在后续的推文中会进一步的讲解。


往期精彩:



从numpy开启Python数据科学之旅




R数据处理包plyr:超越apply函数族的向量化运算




gganimate:构建R语言可视化gif动图



使用jupyter notebook搭建数据科学最佳交互式环境


R编程特性1:向量与向量化


R Markdown|可能是你数据分析报告最好的解决方案


如何写出整洁规范的R代码?是时候讨论一下代码规范性了


R语言向量化运算:apply函数族用法心得



Python面向对象编程:数据封装、继承和多态



[译]为什么R语言是当今最值得学习的数据科学语言


一个数据科学热爱者的学习历程








本文由鲁伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。


转载、引用前需联系作者,并署名作者且注明文章出处。


本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。





推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
手机用户2502936521
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有