本节主要介绍一下Pandas的数据结构,本文引用的网址:https://www.dataquest.io/mission/146/pandas-internals-series

本文所使用的数据来自于:https://github.com/fivethirtyeight/data/tree/master/fandango

该数据主要描述了一些电影的烂番茄评分情况

 

数据结构

在Pandas中,主要有三种重要的数据结构:

  • Series(值的集合)
  • DataFrame(Series的集合)
  • Panel(DataFrame的集合)

 

Pandas的Series是Numpy的数组(array)的升级版,Numpy只能使用整数来所索引,但是Series还可以使用字符串来索引,还能使用混合的数据类型和NaN来表示缺失值,一个Series对象可以包含以下几种数据类型:

  • float -- 表示字符串数值
  • int -- 表示整型数值
  • bool -- 表示布尔值
  • datetime64[ns] -- 表示日期和时间(不带时区)
  • datetime64[ns, tz] -- 表示日期和时间(有时区)
  • timedelta[ns] -- 以不同的格式(分钟,秒等)格式表示时间
  • category -- 表示分类值
  • object -- 表示字符串值

 

DataFrame使用Series对象来表示每一列的数据,所以当从一个DataFrame中选择某一列的时间,Pandas会返回代表了该列的Series对象,并且从0开始索引该Series的行,当然也可以使用分片来选择多行

# 分别选择FILM和RottenTomatoes两列,并输出前5行

fandango = pd.read_csv('fandango_score_comparison.csv')

series_film = fandango['FILM']

print(series_film.head(5)) 

series_rt = fandango['RottenTomatoes']

print(series_rt[:5])

输出:

原始的数据如下:

 

 

自定义索引

上面提取了两个Series,series_film代表了电影名称,series_rt代表了评分,我现在想知道这两部电影(Minions (2015), Leviathan (2014))的评分,最简单的方法就是这样

print(fandango[fandango['FILM']=='Minions (2015)']['RottenTomatoes'].values[0])

print(fandango[fandango['FILM']=='Leviathan (2014)']['RottenTomatoes'].values[0])

# 这样要对每部电影都写一个语句是非常麻烦的

# 最好的方法就是将series_film和series_rt组合成一个新的Series,用电影名称作为索引,电影评分作为值,这样要查询多部电影时就变得方便

film_names = series_film.values

rt_scores = series_rt.values

series_custom = Series(rt_scores , index=film_names) # 创建一个Series,需要指定data和index参数

 

#此时要查询多部电影就变得简单

series_custom[['Minions (2015)', 'Leviathan (2014)']]

#对于上面新建的一个Series,现在要对电影的名称进行按字母重新排序,可以使用sort_index()函数,如果要对电影的评分排序则使用sort_values()函数

sc2 = series_custom.sort_index()

sc3 = series_custom.sort_values()

 

向量化运算

当你要操作数据集中的某一列的数据时,Series对象可以快速地进行向量化的运算(自动对该列中的每个数据值都进行运算),Pandas的底层使用了Numpy,而Numpy则使用了C语言来循环一整列的值,所以会快得飞起。要是你特意使用一个for来循环一个Series对象,实际上会变得非常慢。

 

向量化运算的例子

#对一个Series进行加减乘除运算

series_custom/10

# 这个语句实际上是对series_custom这个Series中的每个值都进行除法运算,注意,是不会对索引进行运算的

# 也可以使用Numpy的函数来进行运算

np.max(series_custom) #求出电影分数的最大值

还可以进行比较与过滤

series_custom > 50 # 返回一个包含布尔值的列表,分数大于50则返回True,可以用于过滤数据

series_greater_than_50 = series_custom[series_custom > 50]

# 也可以使用&(and)和 |(or)连接几个判断

series_greater_than_50_&_less_than_80 = \

    series_custom[(series_custom > 50)  & (series_custom < 80) ]

当然,也可以直接对两个Series进行运算

rt_critics = Series(fandango['RottenTomatoes'].values, index=fandango['FILM']) # 影评人的评分

rt_users = Series(fandango['RottenTomatoes_User'].values, index=fandango['FILM']) #用户评分

rt_mean = (rt_critics + rt_users) / 2 # 平均分

Pandas简易入门(三)的更多相关文章

  1. Pandas简易入门(二)

    目录:     处理缺失数据     制作透视图     删除含空数据的行和列     多行索引     使用apply函数   本节主要介绍如何处理缺失的数据,可以参考原文:https://www. ...

  2. Pandas简易入门(一)

    目录: 读取数据 索引 选择数据 简单运算 声明,本文引用于:https://www.dataquest.io/mission/8/introduction-to-pandas (建议阅读原文) Pa ...

  3. Pandas简易入门(四)

    本节主要介绍一下Pandas的另一个数据结构:DataFrame,本文的内容来源:https://www.dataquest.io/mission/147/pandas-internals-dataf ...

  4. 机器学习简易入门(四)- logistic回归

    摘要:使用logistic回归来预测某个人的入学申请是否会被接受 声明:(本文的内容非原创,但经过本人翻译和总结而来,转载请注明出处) 本文内容来源:https://www.dataquest.io/ ...

  5. 不用搭环境的10分钟AngularJS指令简易入门01(含例子)

    不用搭环境的10分钟AngularJS指令简易入门01(含例子) `#不用搭环境系列AngularJS教程01,前端新手也可以轻松入坑~阅读本文大概需要10分钟~` AngularJS的指令是一大特色 ...

  6. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...

  7. Web压力测试工具 LoadRunner12.x简易入门教程--(一)回放与录制

        LoadRunner12.x简易入门教程--(一)回放与录制 今天在这里分享一下LoadRunner12.x版本的入门使用方法,希望对刚接触LoadRunner的童鞋有所帮助. LoadRun ...

  8. Python pandas快速入门

    Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...

  9. JNI简易入门

    JNI简介 JNI(Java Native Interface)是JDK的一部分,提供了若干API实现了Java和其他语言的通信(主要是C/C++).JNI主要用于以下场景: 贴近硬件底层的功能,Ja ...

随机推荐

  1. ArcGIS Server 10.2 实战(二)动态修改要素数据的地理处理服务

    上一篇<ArcGIS Server 10.2 实战(一)Asp.net MVC与JSON数据妙用实现动态生成要素图层>介绍了如何用JSON转要素的地理处理服务,实现了动态创建点要素并加载到 ...

  2. Linux下配置Node环境变量及问题详解

    这是之前在Linux下配置Node环境变量时踩过的坑,今天又有小伙伴询问这个问题,因此记录下来,不仅是给新童鞋们一些参考,也方便日后查阅 在这之前,相信都已经安装好了,没安装的可以查看博主另一篇文章 ...

  3. Linux安装Oracle 11G过程(测试未写完)

    一.简介 Oracle数据库在系统运维中的重要性不言而喻,通过熟悉Oracle的安装来加深对操作系统和数据库知识的了解.Linux安装Oracle前期修改linux内核参数很重要,其实就是linux下 ...

  4. 给jdk写注释系列之jdk1.6容器(4)-HashMap源码解析

    前面了解了jdk容器中的两种List,回忆一下怎么从list中取值(也就是做查询),是通过index索引位置对不对,由于存入list的元素时安装插入顺序存储的,所以index索引也就是插入的次序. M ...

  5. [转]每次打开IE9就会跳出管理加载项的窗口

    当您打开IE9就跳出管理加载项的窗口,这一般是由于使用优化软件对系统进行优化清理后导致了注册表的错误.上次我们就为大家介绍了关于IE9启动后自动弹出管理加载项窗口的问题,这两个问题非常类似,引发问题的 ...

  6. hdu 1195 广度搜索

    这题我们可以用优先队列,每次弹出队列中操作次数最少的一个,那么当找到匹配数时,该值一定是最优的.需要注意的时,加个vi[]数组,判读当前数是否已经存在于队列中.我做的很烦啊~~~ #include&l ...

  7. Android自动化测试介绍

    1.随机事件测试.通过adb命令执行测试Monkey 就是SDK中附带的一个工具, 用来做压力测试.应用程序crash 和 ANR时会产生日志. 然后根据关键字分析,就可以把应用出现的问题抓出来. 2 ...

  8. html JS打印添加水印图片

    最后,听取了别人的意见,换了个思路.将水印图和需要打印的内容放在一个div里面, 给打印的div设置较高的层级,这样水印自然就在最下面了.下面贴上部分代码: html: <div class=& ...

  9. android手机中图片的拖拉及浏览功能

    配置文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro ...

  10. .Net 微信开发与微信支付

    .NET     https://github.com/JeffreySu/WeiXinMPSDK JAVA   http://git.oschina.net/pyinjava/fastweixin ...