Pandas简易入门(二)

目录:

    处理缺失数据

    制作透视图

    删除含空数据的行和列

    多行索引

    使用apply函数

 

本节主要介绍如何处理缺失的数据,可以参考原文:https://www.dataquest.io/mission/12/working-with-missing-data

本节要处理的数据来自于泰坦尼克号的生存者名单,它的数据如下


pclass,survived,name,sex,age,sibsp,parch,ticket,fare,cabin,embarked,boat,body,home.dest

1,1,"Allen, Miss. Elisabeth Walton",female,29,0,0,24160,211.3375,B5,S,2,,"St Louis, MO"

1,1,"Allison, Master. Hudson Trevor",male,0.9167,1,2,113781,151.5500,C22 C26,S,11,,"Montreal, PQ / Chesterville, ON"

1,0,"Allison, Miss. Helen Loraine",female,2,1,2,113781,151.5500,C22 C26,S,,,"Montreal, PQ / Chesterville, ON"

其中,pclass描述的是客舱等级,boat描述的是生存者搭乘的救生艇号码,body描述的是乘客的尸体编码。其中age和sex字段都有缺失的数据。由于不能对缺失数据进行运算,所以要先处理缺失的数据

 

处理缺失数据

首先,Pandas会用NaN(not a number)来表示一个缺失的数据,计算age字段为空的数据有多少行。Pandas有一个函数isnull()可以直接判断该列中的哪个数据为NaN

import pandas as pd

file = ‘titanic_survival.csv’

titanic_survival = pd.read_csv(file)

age_null = pd.isnull(titanic_survival[‘age’])

age_null_true = age_null[ age_null == True]

age_null_count = len(age_null_true)

#计算age字段的平均值

import pandas as pd

mean_age = sum(titanic_survival["age"]) / len(titanic_survival["age"])

# mean_age的值为NaN,因为对NaN数据进行运算,结果也是NaN

# 所以要先去除NaN数据

age_null = pd.isnull(titanic_survival["age"])

correct_mean_age = sum(titanic_survival[‘age‘][age_null == False]) / len(titanic_survival[‘age‘][age_null == False])

 

由于处理缺失数据很普遍,所以Pandas使用了一些可以自动过滤NaN的方法,譬如,mean()方法可以自动过滤缺失数据并计算平均值

correct_mean_age = titanic_survival["age"].mean()

总结:Pandas处理缺失数据的方法就是先用pd.isnull()来循环判断某列中的数据是否有空值,然后生成一个只有True或者False的列表,再把该列表中的False值传进该列中来得出不为空的数据

 

制作透视图

可以使用数据透视表汇总、分析、浏览和显示数据表数据概览或 外部数据 源。 数据透视表在您需要合计较大的数字列表时非常有用,聚合后的数据或分类汇总有助于您从不同角度查看数据和比较类似数据图表。

计算每一个客舱平均年龄,使用函数pivot_table()

import pandas as pd

import numpy as np

passenger_age = titanic_survival.pivot_table(index=‘pclass‘, values=‘age‘, aggfunc=np.mean)

# index参数指明了用来分类的列,values标签指明了用来计算的列,aggfunc指明了使用什么函数来计算values指定的列

# 如果要计算男性与女性的平均年龄

passenger_age = titanic_survival.pivot_table(index=‘sex‘, values=‘age‘, aggfunc=np.mean)

 

还可以制作更加复杂的透视图

譬如,要计算每一个客舱等级的平均年龄和费用

import numpy as np

# 只要在values参数中增加参数即可

passenger_survival = titanic_survival.pivot_table(index="pclass", values=["age", "fare"], aggfunc=np.mean)

# 同样地,我要计算每个客舱等级中,每个性别的平均年龄和费用,则增加index的参数

passenger_survival = titanic_survival.pivot_table(index=["pclass","sex"], values=["age", "fare"], aggfunc=np.mean)

 

删除含有空数据的行和列

可以使用dropna()函数来删除具有空数据的行或列

import pandas as pd

# 删除含有空数据的全部行

new_titanic_survival = titanic_survival.dropna()

# 可以通过axis参数来删除含有空数据的全部列

new_titanic_survival = titanic_survival.dropna(axis=1)

# 可以通过subset参数来删除在age和sex中含有空数据的全部行

new_titanic_survival = titanic_survival.dropna(subset=["age", "sex"])

print(new_titanic_survival)

new_titanic_survival = titanic_survival.dropna(subset=[‘age‘, ‘body‘,‘home.dest‘])

 

 

多行索引

这是原始的titanic_survival

在我删除了那些body列为NaN的行之后,数据变成了下面这样

new_titanic_survival = titanic_survival.dropna(subset=["body"])

可见,在new_titanic_survival表中,行的索引仍然保持和之前一样,并没有重新从0开始计算。在上一篇的《Pandas简易入门(一)》中可以知道Pandas使用loc[ m ]函数来索引行号为m的那一行,或者loc[ m: n]来索引行号从m到n(包括n)的那些行,或者loc [[ m, n, o]]来索引行索引号为m, n, o的行。

但是,在重新生成的new_titanic_suvival中,行的索引号已经变得毫无规律,此时就要使用新的函数iloc[]来按照位置索引

# 输出新表的前五行

m = new_titanic_survival.iloc[:5,:]

# 输出新表的第四行,注意仍然从0开始索引,所以在参数中填的是3而不是4

n = new_titanic_survival.iloc[3,:]

 

假如我想取出新表中第一行,第一列的那个值

m = new_titanic_survival.iloc[0,0]

等价于

n = new_titanic_survival.loc[3,"pclass"]

总结:iloc函数按照所在位置索引(iloc[]中的参数只能为整型值或者整型的分片),loc函数按照行号和列名索引

 

 

看过上面就可以知道使用iloc来索引有多么的麻烦,实际上可以对新表进行索引重排序,使用reset_index()函数即可

titanic_reindexed = titanic_survival.dropna(subset=[‘age‘, ‘boat‘]).reset_index(drop=True)

# drop函数用来指明是否不把原表中的index值作为一个新列放进新表

对比上图就看到行索引进行了重排序,如果drop参数为False

titanic_reindexed_false = titanic_survival.dropna(subset=[‘body‘]).reset_index(drop=False),就会生成如下格式

可以看到多了名为index的第一列,该值就是原表中的索引值

 

使用apply函数

之前我们已经计算了某一列中含有空值的数量,如果我要列出该表每一列中究竟有多少个空值呢,就可以使用apply(function)函数,该函数会将自定义的function函数应用在每一列中,并且把运行的结果保存在一个新的Series中,如下

import pandas as pd

# 这个函数返回一列中的空值数量

def null_count(column):

    #首先用isnull函数判断该列中每个数值是否为空,生成一个只有True或者False的向量(列表)

    column_null = pd.isnull(column)

    # 把空值的那些数据提取出来,放在一个向量中

    null = column[column_null == True]

    # 返回该向量的长度即可

    return len(null)

# 对所有的列都运行该函数

column_null_count = titanic_survival.apply(null_count)

print(column_null_count)

 

如果要把函数运行在全部行上,就是用axis参数即可

#对于每一行,假如该行的age字段缺失就显示unknown,age小于18就返回minor,age大于等于18就返回adult

def judge(row):

    if pd.isnull(row[‘age‘]) == True :

        return ‘unknown‘ 

    return ‘minor‘ if row[‘age‘] < 18 else ‘adult‘

age_labels = titanic_survival.apply(judge, axis=1)

print(titanic_survival.columns)

时间: 2024-08-04 23:42:47

Pandas简易入门(二)的相关文章

Pandas简易入门(一)

目录:     读取数据     索引     选择数据     简单运算     声明,本文引用于:https://www.dataquest.io/mission/8/introduction-to-pandas (建议阅读原文) Pandas使用一个二维的数据结构DataFrame来表示表格式的数据,相比较于Numpy,Pandas可以存储混合的数据结构,同时使用NaN来表示缺失的数据,而不用像Numpy一样要手工处理缺失的数据,并且Pandas使用轴标签来表示行和列   读取数据 Pan

Pandas简易入门(三)

本节主要介绍一下Pandas的数据结构,本文引用的网址:https://www.dataquest.io/mission/146/pandas-internals-series 本文所使用的数据来自于:https://github.com/fivethirtyeight/data/tree/master/fandango 该数据主要描述了一些电影的烂番茄评分情况   数据结构 在Pandas中,主要有三种重要的数据结构: Series(值的集合) DataFrame(Series的集合) Pan

《逻辑思维简易入门》(第2版) 阅读笔记二

<逻辑思维简易入门>(第2版) 阅读笔记二 本周阅读的是<逻辑思维简易入门>的第三章,也就是说,本书的第一部分就已经读完了. 第三章.信念的优点 信念和负信念是人们在接受一个事物时一种心理态度,延伸来说也就是对事物的认知态度.因为我们在研究 逻辑思维的时候,都有一个前提:“以正常情况以及说话者真诚”,所以有人如果对于一件事物不做回应,我们可以认为这是一种既不相信,也不怀疑的的态度. 信念的优缺点有很多,在书中主要介绍了下面几种: 1.准确性 好的信念实在准确的表达事实,同样真的信念

小鹤双拼鹤形简易入门-by小鹤双拼输入法QQ群用户-弧

更新时间:2013-5-30 鹤形简易入门 1.完整的小鹤双拼,由其双拼方案和双形组成,任何单字的全码长度均为四,前两码为声母和韵母(这就是大家已经学会了的纯双拼部分),后两码为双形.2.基本规则:双形的两码分别取一个字的首字根和末字根. 举例:型=xkkt,前两码xk为拼音,后两码kt为双形(k表示首字根"开",t表示末字根"土") 注意:大部分的字根都是取的拼音,所以不用死记哦.例如:草头"艹"=C,扶手旁"扌"=F,走之

[WebGL入门]二十,绘制立体模型(圆环体)

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 本次的demo的运行结果 立体的模型 这次稍微喘口气,开始绘制立体模型.这里说的[喘口气]是指本次的文章中没有出现任何新的技术知识点.只是利用到现在为止所介绍过的内容,来绘制一个立体的圆环体.到现在为止,只绘制了三角形和四边形,当然,在三维空间中绘制简单的多边形也没什么不对,但是缺点儿说服力.

kafka入门二:Kafka的设计思想、理念

本节主要从整体角度介绍Kafka的设计思想,其中的每个理念都可以深入研究,以后我可能会发专题文章做深入介绍,在这里只做较概括的描述以便大家更好的理解Kafka的独特之处.本节主要涉及到如下主要内容: Kafka设计基本思想 Kafka中的数据压缩 Kafka消息转运过程中的可靠性 Kafka集群镜像复制 Kafka 备份机制 一.kafka由来 由于对JMS日常管理的过度开支和传统JMS可扩展性方面的局限,LinkedIn(www.linkedin.com)开发了Kafka以满足他们对实时数据流

Netty入门二:开发第一个Netty应用程序

    既然是入门,那我们就在这里写一个简单的Demo,客户端发送一个字符串到服务器端,服务器端接收字符串后再发送回客户端. 2.1.配置开发环境 1.安装JDK 2.去官网下载jar包 (或者通过pom构建) 2.2.认识下Netty的Client和Server 一个Netty应用模型,如下图所示,但需要明白一点的是,我们写的Server会自动处理多客户端请求,理论上讲,处理并发的能力决定于我们的系统配置及JDK的极限. Client连接到Server端 建立链接发送/接收数据 Server端

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

LoadRunner12.x简易入门教程--(一)回放与录制 今天在这里分享一下LoadRunner12.x版本的入门使用方法,希望对刚接触LoadRunner的童鞋有所帮助. LoadRunner12的组成分为三部分,分别是:Virtual User Generator.Controller.Analysis 首先要介绍的是用Virtual User Generator做一个最简单的录制与回放. 打开软件后,界面如下,通过左上角的菜单,我们来新建一个脚本 由于现在Web项目比较多,这里也就用W

Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问这个类不存在的方法,那么它会去访问”魔术方法__call()” 用户访问一个不存在的操作—>解决:给每个控制器都定义个_empty()方法来处理 第二个解决方法:定义一个空操作 [空模块处理] 我们使用一个类,但是现在这个类还没有被include进来. 我们可以通过自动加载机制处理__autoloa