目录:

处理缺失数据制作透视图删除含空数据的行和列多行索引使用apply函数

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

 PassengerId  Survived  Pclass    ...        Fare Cabin  Embarked
0            1         0       3    ...      7.2500   NaN         S
1            2         1       1    ...     71.2833   C85         C
2            3         1       3    ...      7.9250   NaN         S
3            4         1       1    ...     53.1000  C123         S
4            5         0       3    ...      8.0500   NaN         S

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

处理缺失数据 pd.isnull()

首先,Pandas会用NaN(not a number)来表示一个缺失的数据,计算age字段为空的数据有多少行。Pandas有一个函数isnull()可以直接判断该列中的哪个数据为NaN
由于处理缺失数据很普遍,所以Pandas使用了一些可以自动过滤NaN的方法,譬如,mean()方法可以自动过滤缺失数据并计算平均值
总结:Pandas处理缺失数据的方法就是先用pd.isnull()来循环判断某列中的数据是否有空值,返回一个只有True或者False的列表,再把该列表中的False值传进该列中来得出不为空的数据


复制代码
import pandas as pdfile = ‘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 pdmean_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])

制作透视图 pivot_table()

可以使用数据透视表汇总、分析、浏览和显示数据表数据概览或 外部数据 源。 数据透视表在您需要合计较大的数字列表时非常有用,聚合后的数据或分类汇总有助于您从不同角度查看数据和比较类似数据图表。
pivot_table()
index参数指明了用来分类的列,values标签指明了用来计算的列,aggfunc指明了使用什么函数来计算values指定的列

#计算每一个客舱平均年龄import pandas as pdimport numpy as nppassenger_age = titanic_survival.pivot_table(index='pclass', values='age', aggfunc=np.mean)# 如果要计算男性与女性的平均年龄
passenger_age = titanic_survival.pivot_table(index='sex', values='age', aggfunc=np.mean)#计算每一个客舱等级的平均年龄和费用
# 只要在values参数中增加参数即可
passenger_survival = titanic_survival.pivot_table(index="pclass", values=["age", "fare"], aggfunc=np.mean)# 同样地,我要计算每个客舱等级中,每个性别的平均年龄和费用,则增加index的参数
#index=[,]每个客舱等级中,每个性别
#values=[,]年龄和费用
#aggfunc=np.mean 平均
passenger_survival = titanic_survival.pivot_table(index=["pclass","sex"], values=["age", "fare"], aggfunc=np.mean)

删除含有空数据的行和列 dropna()

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

import pandas as pd# 删除含有空数据的全部行,返回新表dataframe
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'])

多行索引 .iloc[]

重新索引 .reset_index()

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

#在我删除了那些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来索引有多么的麻烦,实际上可以对新表进行索引重排序,使用reset_index()函数即可

titanic_reindexed = titanic_survival.dropna(subset=['age', 'boat']).reset_index(drop=True)
# drop函数用来指明是否不把原表中的index值作为一个新列放进新表#行索引进行了重排序,如果drop参数为False,把原表中的index值作为一个新列放进新表
titanic_reindexed_false = titanic_survival.dropna(subset=['body']).reset_index(drop=False)

apply(function)函数

data.frame.apply(function)将自定义的function函数应用在dataframe的每一列

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

import pandas as pd# null_count()返回一列中的空值数量,输入参数为某一列def null_count(column):#首先用isnull函数判断该列中每个数值是否为空,生成一个只有True或者False的向量(列表)column_null = pd.isnull(column)# 把空值的那些数据提取出来,放在一个向量中null = column[column_null == True]# 返回该向量的长度即可return len(null)# 对所有的列都运行该函数 data.frame.apply(function)
column_null_count = titanic_survival.apply(null_count)print(column_null_count)

如果要把函数运行在全部行上,就是用axis参数即可 axis = 1
dataframe.apply(function, axis=1)


#对于每一行,假如该行的age字段缺失就显示unknown,age小于18就返回minor,age大于等于18就返回adultdef 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)

【A-003】python数据分析与机器学习实战 Python科学计算库 Pandas数据分析处理库(二)相关推荐

  1. python中符号计算输出数学_Python科学计算与数据处理—符号运算库.doc

    Python 科学计算与数据处理 - 符号运算库 符号运算库目录从示例开始欧拉恒等式球体体积数学表达 式符号数值运算符和函数符号运算表达式转换和简化方程目录微分 方程积分其他函数符号运算库. 它的目标 ...

  2. 01、python数据分析与机器学习实战——python数据分析处理库-Pandas

    pandas介绍 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. panda ...

  3. 01、python数据分析与机器学习实战——Python数据可视化库-Matplotlib

    Matplotlib介绍 Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形. Matplotlib基础 1.折线图绘制 假设,我 ...

  4. 01、python数据分析与机器学习实战——Python科学计算库-Numpy

    深度学习--学习目录 NumPy介绍 NumPy系统是Python的一种开源的数值计算扩展. 这种工具可用来存储和处理大型矩阵, 比Python自身的嵌套列表(nested list structur ...

  5. 01、python数据分析与机器学习实战——Python可视化库Seaborn

    seaborn简介 Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图. seaborn基础 i ...

  6. 跟着迪哥学python 经管之家_跟着迪哥学Python数据分析与机器学习实战

    本书结合了机器学习.数据分析和Python语言,通过案例以通俗易懂的方式讲解了如何将算法应用到实际任务. 全书共20章,大致分为4个部分.第一部分介绍了Python的工具包,包括科学计算库Numpy. ...

  7. 23神经网络 :唐宇迪《python数据分析与机器学习实战》学习笔记

    唐宇迪<python数据分析与机器学习实战>学习笔记 23神经网络 1.初识神经网络 百度深度学习研究院的图,当数据规模较小时差异较小,但当数据规模较大时深度学习算法的效率明显增加,目前大 ...

  8. 数据分析与机器学习实战(一)——机器学习基础

    数据分析与机器学习实战(一)--机器学习基础 数据分析与机器学习实战(二)--聚类分析(以K-means聚类为例) 文章目录 数据分析与机器学习实战(一)--机器学习基础 数据分析与机器学习实战(二) ...

  9. Python科学计算之Pandas基础学习

    Python科学计算之Pandas基础学习 导入Pandas 我们首先要导入我们的演出明星--Pandas. 这是导入Pandas的标准方式.显然,我们不希望每时每刻都在程序中写'pandas',但是 ...

最新文章

  1. h3c交换机限制端口访问_H3C交换机端口限速和流量监管典型配置指导
  2. Nginx —— ngx_http_core_module 模块提供的变量
  3. [原]关于鼠标滚轮的编程
  4. tomcat基本知识点与实例
  5. java项目使用junit_在Java 8之前的项目中使用JUnit 5
  6. Exynos4412 裸机开发 —— IIC总线
  7. code第一部分:数组
  8. ASP.NET部署与安装_MSI制作图文教程.
  9. get请求中params参数的使用
  10. 【转载】linux tail命令的使用方法详解
  11. 老司机心得之时间管理入坑
  12. 计算机处于离线状态是什么原因,电脑Cortana语音助手显示处于离线状态怎么办?...
  13. Engineering Dynamics 2 --- 动量和角动量
  14. 职业院校教师招聘结构化面试
  15. 考研英语单词-近义词分类-Second Day
  16. apriori算法 python实现
  17. c语言编程 人造卫星的高度,C语言实验教学教案2008
  18. 黄帝内经-第40篇-腹中论篇(1)
  19. 8大软件供应链攻击事件概述
  20. 使用ESXCLI将ESXi 6.5或6.7升级到ESXi 7.0

热门文章

  1. [若有所悟]提升工作效率的一些小技巧——资源管理器篇
  2. OpenWRT 程序开机启动
  3. Typora基础使用教程
  4. 机器学习入门实战---波士顿房价预测
  5. Android 无法连接鸿蒙系统手机
  6. django中Models常用的字段及属性介绍
  7. 2013-BIT程序设计 15.小浣熊干脆面
  8. 4rx4 服务器内存2rx4_【不是大神的科普】关于ECC内存和REG内存的一些科普
  9. 简易日历-Java实现
  10. 南大自考流程详解-计算机应用/计算机科学与技术