您的位置:首页 > 编程语言 > Python开发

Python数据分析之pandas学习(二)

2017-04-15 11:29 726 查看
有关pandas模块的学习与应用主要介绍以下8个部分: 1、数据结构简介:DataFrame和Series 2、数据索引index 3、利用pandas查询数据 4、利用pandas的DataFrames进行统计分析 5、利用pandas实现SQL操作 6、利用pandas进行缺失值的处理 7、利用pandas实现Excel的数据透视表功能 8、多层索引的使用

我们在 Python数据分析之pandas学习(一) Python数据分析之pandas学习(一)中已经介绍到了第四部分的描述性统计分析,我们接着往下讲pandas模块中的其他的知识点。


五、类似于SQL的操作

在SQL中常见的操作主要是增、删、改、查几个动作,那么pandas能否实现对数据的这几项操作呢?答案是Of Course!


增:添加新行或增加新列

``` In [99]: dic = {'Name':['LiuShunxiang','Zhangshan'], ...: 'Sex':['M','F'],'Age':[27,23], ...: 'Height':[165.7,167.2],'Weight':[61,63]}

In [100]: student2 = pd.DataFrame(dic)

In [101]: student2 Out[101]: Age Height Name Sex Weight 0 27 165.7 LiuShunxiang M 61 1 23 167.2 Zhangshan F 63 ``` 现在将student2中的数据新增到student中,可以通过 concat函数 实现:

注意到了吗?在数据库中union必须要求两张表的列顺序一致,而这里concat函数可以自动对齐两个数据框的变量!

新增列的话,其实在pandas中就更简单了,例如在student2中新增一列学生成绩:

对于新增的列没有赋值,就会出现空NaN的形式。


删:删除表、观测行或变量列

删除数据框student2,通过del命令实现,该命令可以删除Python的所有对象。

删除指定的行

原数据中的第1,2,4,7行的数据已经被删除了。
根据布尔索引删除行数据,其实这个删除就是保留删除条件的反面数据,例如删除所有14岁以下的学生:


删除指定的列

我们发现,不论是删除行还是删除列,都可以通过drop方法实现,只需要设定好删除的轴即可,即调整drop方法中的axis参数。默认该参数为0,表示删除行观测,如果需要删除列变量,则需设置为1。


改:修改原始记录的值

如果发现表中的某些数据错误了,如何更改原来的值呢?我们试试结合布尔索引和赋值的方法: 例如发现student3中姓名为Liushunxiang的学生身高错了,应该是173,如何改呢?

这样就可以把原来的身高修改为现在的170了。
看,关于索引的操作非常灵活、方便吧,就这样轻松搞定数据的更改。


查:有关数据查询部分,上面已经介绍过,下面重点讲讲聚合、排序和多表连接操作。


聚合:pandas模块中可以通过groupby()函数实现数据的聚合操作

根据性别分组,计算各组别中学生身高和体重的平均值:


如果不对原始数据作限制的话,聚合函数会自动选择数值型数据进行聚合计算。如果不想对年龄计算平均值的话,就需要剔除改变量:


groupby还可以使用多个分组变量,例如根本年龄和性别分组,计算身高与体重的平均值:

当然,还可以对每个分组计算多个统计量:

是不是很简单,只需一句就能完成SQL中的SELECT...FROM...GROUP
BY...功能,何乐而不为呢?


排序:

排序在日常的统计分析中还是比较常见的操作,我们可以使用order、sort index和sort values实现序列和数据框的排序工作:


我们再试试降序排序的设置:

上面两个结果其实都是按值排序,并且结果中都给出了警告信息,即建议使用sort_values()函数进行按值排序。

在数据框中一般都是按值排序,例如:



多表连接:

多表之间的连接也是非常常见的数据库操作,连接分内连接和外连接,在数据库语言中通过join关键字实现,pandas我比较建议使用merger函数实现数据的各种连接操作。 如下是构造一张学生的成绩表:

现在想把学生表student与学生成绩表score做一个关联,该如何操作呢?

注意,默认情况下,merge函数实现的是两个表之间的内连接,即返回两张表中共同部分的数据。可以通过how参数设置连接的方式,left为左连接;right为右连接;outer为外连接。


左连接实现的是保留student表中的所有信息,同时将score表的信息与之配对,能配多少配多少,对于没有配对上的Name,将会显示成绩为NaN。

感谢作者分享

数据人网是数据人学习、交流和分享的平台http://shujuren.org 。专注于从数据中学习。 平台的理念: 人人投稿,知识共享;人人分析,洞见驱动;智慧聚合,普惠人人。 您在数据人网平台,可以1)学习数据知识;2)创建数据博客;3)认识数据朋友;4)寻找数据工作;5)找到其它与数据相关的干货。 我们努力坚持做原创,分享和传播数据知识干货! 我们都是数据人,数据是有价值的,坚定不移地利用数据价值创造价值!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 数据结构