Pandas简易入门(三)
本节主要介绍一下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简易入门(三)的更多相关文章
- Pandas简易入门(二)
目录: 处理缺失数据 制作透视图 删除含空数据的行和列 多行索引 使用apply函数 本节主要介绍如何处理缺失的数据,可以参考原文:https://www. ...
- Pandas简易入门(一)
目录: 读取数据 索引 选择数据 简单运算 声明,本文引用于:https://www.dataquest.io/mission/8/introduction-to-pandas (建议阅读原文) Pa ...
- Pandas简易入门(四)
本节主要介绍一下Pandas的另一个数据结构:DataFrame,本文的内容来源:https://www.dataquest.io/mission/147/pandas-internals-dataf ...
- 机器学习简易入门(四)- logistic回归
摘要:使用logistic回归来预测某个人的入学申请是否会被接受 声明:(本文的内容非原创,但经过本人翻译和总结而来,转载请注明出处) 本文内容来源:https://www.dataquest.io/ ...
- 不用搭环境的10分钟AngularJS指令简易入门01(含例子)
不用搭环境的10分钟AngularJS指令简易入门01(含例子) `#不用搭环境系列AngularJS教程01,前端新手也可以轻松入坑~阅读本文大概需要10分钟~` AngularJS的指令是一大特色 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- Web压力测试工具 LoadRunner12.x简易入门教程--(一)回放与录制
LoadRunner12.x简易入门教程--(一)回放与录制 今天在这里分享一下LoadRunner12.x版本的入门使用方法,希望对刚接触LoadRunner的童鞋有所帮助. LoadRun ...
- Python pandas快速入门
Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...
- JNI简易入门
JNI简介 JNI(Java Native Interface)是JDK的一部分,提供了若干API实现了Java和其他语言的通信(主要是C/C++).JNI主要用于以下场景: 贴近硬件底层的功能,Ja ...
随机推荐
- Linux编程之《进程/线程绑定CPU》
Intro----- 通常我们在编写服务器代码时,可以通过将当前进程绑定到固定的CPU核心或者线程绑定到固定的CPU核心来提高系统调度程序的效率来提高程序执行的效率,下面将完整代码贴上. /***** ...
- 小白日记7:kali渗透测试之主动信息收集-发现(一)--二层发现:arping/shell脚本,Netdiscover,scapy
主动信息收集 被动信息收集可能不准确,可以用主动信息收集验证 特点:直接与目标系统交互通信,无法避免留下访问痕迹 解决方法:1.使用受控的第三方电脑进行探测,使用代理 (做好被封杀的准备) 2 ...
- 安装openshift客户端工具 rhc
安装ruby: $ sudo apt-get install ruby-full 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 将会安装下列额外的软件包: ...
- Visual studio 2012 添加 GitHub
文件-新建项目
- LeetCode 283
Move Zeros Given an array nums, write a function to move all 0's to the end of it while maintaining ...
- AI 对不起 我还爱着你
艾弗森,对不起,我还爱着你.有时候我自己都不知道自己我怎么了,直到最后才发现,我还爱着你. 那天起,我认识了你,便一发不可收拾.这些天,谢谢你,似乎因为你的影响让我改变了,坚持了许多.致以至今我才发现 ...
- mysql 5.7 root password 过期
重新修改root密码 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); ALTER USER 'root'@localhost' P ...
- MyBatis(3.2.3) - Integration with Spring
MyBatis-Spring is a submodule of the MyBatis framework, which provides seamless integration with the ...
- Android的ListView分页功能
一.功能分析----ListView“加载更多”,功能如下图所示: 这个效果是当你上拉拖动页面时(注意有区别于下拉刷新),页面提示正在加载,2秒后显示留言更多内容:具体功能知道那我就来讲解下如何实现这 ...
- js解析json读取List中的实体对象示例
1.由后台action 传给前台是需要将map 转成json格式 复制代码代码如下: Map<String, List> resultMap: JSONObject json = JSON ...