数据对齐

我们可以计算两个DataFrame的加和,pandas会自动将这两个DataFrame进行数据对齐,如果对不上的数据会被置为Nan(not a number)。

首先我们来创建两个DataFrame:import numpy as npimport pandas as pddf1 = pd.DataFrame(np.arange(9).reshape((3, 3)), columns=list('abc'), index=['1', '2', '3'])df2 = pd.DataFrame(np.arange(12).reshape((4, 3)), columns=list('abd'), index=['2', '3', '4', '5'])复制代码

得到的结果和我们设想的一致,其实只是通过numpy数组创建DataFrame,然后指定index和columns而已,这应该算是很基础的用法了。

然后我们将两个DataFrame相加,会得到:

我们发现pandas将两个DataFrame加起来合并了之后,凡是没有在两个DataFrame都出现的位置就会被置为Nan。这其实是很有道理的,实际上不只是加法,我们可以计算两个DataFrame的加减乘除的四则运算都是可以的。如果是计算两个DataFrame相除的话,那么除了对应不上的数据会被置为Nan之外,除零这个行为也会导致异常值的发生(可能不一定是Nan,而是inf)。

fill_value

如果我们要对两个DataFrame进行运算,那么我们当然不会希望出现空值。这个时候就需要对空值进行填充了,我们直接使用运算符进行运算是没办法传递参数进行填充的,这个时候我们需要使用DataFrame当中为我们提供的算术方法。

DataFrame当中常用的运算符有这么几种:

add、sub、p这些我们都很好理解,那么这里的radd、rsub方法又是什么意思呢,为什么前面要加上一个r呢?

看起来费解,但是说白了一文不值,radd是用来翻转参数的。举个例子,比如说我们希望得到DataFrame当中所有元素的倒数,我们可以写成1 / df。由于1本身并不是一个DataFrame,所以我们不能用1来呼叫DataFrame当中的方法,也就不能传递参数,为了解决这种情况,我们可以把1 / df写成df.rp(1),这样我们就可以在其中传递参数了。

由于在算除法的过程当中发生了除零,所以我们得到了一个inf,它表示无穷大。

我们可以在add、p这些方法当中传入一个fill_value的参数,这个参数可以在计算之前对于一边出现缺失值的情况进行填充。也就是说对于对于只在一个DataFrame中缺失的位置会被替换成我们指定的值,如果在两个DataFrame都缺失,那么依然还会是Nan。

我们对比下结果就能发现了,相加之后的(1, d), (4, c)以及(5, c)的位置都是Nan,因为df1和df2两个DataFrame当中这些位置都是空值,所以没有被填充。

fill_value这个参数在很多api当中都有出现,比如reindex等,用法都是一样的,我们在查阅api文档的时候可以注意一下。

那么对于这种填充了之后还出现的空值我们应该怎么办呢?难道只能手动找到这些位置进行填充吗?当然是不现实的,pandas当中还为我们提供了专门解决空值的api。

空值api

在填充空值之前,我们首先要做的是发现空值。针对这个问题,我们有isna这个api,它会返回一个bool型的DataFrame,DataFrame当中的每一个位置表示了原DataFrame对应的位置是否是空值。

dropna

当然只是发现是否是空值肯定是不够的,我们有时候会希望不要空值的出现,这个时候我们可以选择drop掉空值。针对这种情况,我们可以使用DataFrame当中的dropna方法。

我们发现使用了dropna之后,出现了空值的行都被抛弃了。只保留了没有空值的行,有时候我们希望抛弃是的列而不是行,这个时候我们可以通过传入axis参数进行控制。

这样我们得到的就是不含空值的列,除了可以控制行列之外,我们还可以控制执行drop的严格程度。我们可以通过how这个参数来判断,how支持两种值传入,一种是'all',一种是'any'。all表示只有在某一行或者是某一列全为空值的时候才会抛弃,any与之对应就是只要出现了空值就会抛弃。默认不填的话认为是any,一般情况下我们也用不到这个参数,大概有个印象就可以了。

fillna

pandas除了可以drop含有空值的数据之外,当然也可以用来填充空值,事实上这也是最常用的方法。

我们可以很简单地传入一个具体的值用来填充:

fillna会返回一个新的DataFrame,其中所有的Nan值会被替换成我们指定的值。如果我们不希望它返回一个新的DataFrame,而是直接在原数据进行修改的话,我们可以使用inplace参数,表明这是一个inplace的操作,那么pandas将会在原DataFrame上进行修改。df3.fillna(3, inplace=True)复制代码

除了填充具体的值以外,我们也可以和一些计算结合起来算出来应该填充的值。比如说我们可以计算出某一列的均值、最大值、最小值等各种计算来填充。fillna这个函数不仅可以使用在DataFrame上,也可以使用在Series上,所以我们可以针对DataFrame中的某一列或者是某些列进行填充:

除了可以计算出均值、最大最小值等各种值来进行填充之外,还可以指定使用缺失值的前一行或者是后一行的值来填充。实现这个功能需要用到method这个参数,它有两个接收值,ffill表示用前一行的值来进行填充,bfill表示使用后一行的值填充。

我们可以看到,当我们使用ffill填充的时候,对于第一行的数据来说由于它没有前一行了,所以它的Nan会被保留。同样当我们使用bfill的时候,最后一行也无法填充。

fillna填充某一列_DataFrame基础运算以及空值填充的案例分析相关推荐

  1. python空值填充_pandas | DataFrame基础运算以及空值填充

    今天是pandas数据处理专题的第四篇文章,我们一起来聊聊DataFrame的基本运算. 上一篇文章当中我们介绍了DataFrame数据结构当中一些常用的索引的使用方法,比如iloc.loc以及逻辑索 ...

  2. pandas | DataFrame基础运算以及空值填充

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是pandas数据处理专题的第四篇文章,我们一起来聊聊DataFrame中的索引. 上一篇文章当中我们介绍了DataFrame数据结构当 ...

  3. fillna填充某一列_python dataframe向下向上填充,fillna和ffill的方法

    摘要:这篇Python开发技术栏目下的"python dataframe向下向上填充,fillna和ffill的方法",介绍的技术点是"DataFrame.fillna. ...

  4. mysql load data infile 导入数据 某一列 空_Sql数据挑战赛amp;网络销售案例分析

    SQL挑战赛 第一期: 1: 编写一个查询,列出员工姓名列表,员工每月工资超过2000美元且员工工作时间少于10个月.通过提升employee_id对结果进行排序 select name from e ...

  5. pandas使用fillna函数并设置bfill参数使用列中的后序值填充缺失值

    pandas使用fillna函数并设置bfill参数使用列中的后序值填充缺失值(replace missing values with following values in column in da ...

  6. fillna填充某一列_pandas学习笔记 -了解数据集基本情况,提取数据,缺失值NULL的判断,删除和补充(dropna,fillna的用法)...

    part1 了解数据集基本情况 当我们面对一个很大的数据集的时候,如何快速得到他的行数与列数呢? 举个栗子,我们读取一个nhanes数据集,我们加上一个.shape,输出的结果就是他的行数和列数了. ...

  7. 「SymPy」符号运算(6) 矩阵Matrix及基础运算

    目录 导言 创建矩阵 列表初始化 行向量 列向量 维度和数集 二元函数 `lambda`函数 特殊矩阵 基本操作 索引 增删 基础运算 向量运算 导言 在前几篇文章中,我们学习了SymPy基础/高级用 ...

  8. 【Tableau】如何使用tableau进行两列数据的运算

    如何使用tableau进行两列数据的运算 虽然有过excel基础的人很容易上手tableau这款软件,但初学者在刚刚接触tableau的时候还是会不免有些不知所措.今天以两列数据的加减乘除运算为例,简 ...

  9. numpy学习日志2---矩阵的基础运算

    目录 一.矩阵的基础运算1 二.矩阵的基础运算2 一.矩阵的基础运算1 1.矩阵的加/ 减法 import numpy as np a=np.array([10,20,30,40]) b=np.ara ...

  10. 3.2 Tensorflow基础运算

    3.2 Tensorflow基础运算 1. 导入Tensorflow import tensorflow as tf 2. 矩阵计算 TensorFlow是一个科学计算库,它使用 张量 (Tensor ...

最新文章

  1. 路由器、路由与路由表
  2. 第四章(变量、作用域、内存问题)
  3. GOPROXY环境变量中direct的含义与用途
  4. ASP.NET获取客户端、服务器端基础信息集合
  5. linux用的那国语言,在linux上可以使用什么变成语言
  6. python去掉最高分和最低分_去掉一个最高分,去掉一个最低分求平均值(trimmean)...
  7. poj2513Colored Sticks(无向图的欧拉回路)
  8. 【Java数据结构与算法】第三章 双向链表和约瑟夫问题
  9. springboot实现条形码_Springboot转发重定向实现方式解析
  10. 高倍数泡沫装置PHP_移动式高倍数泡沫灭火装置
  11. C# 使用AutoResetEvent进行线程同步
  12. python实现语法分析器_python语法分析器
  13. 计算机名和ip不匹配,错误:主机名/ IP不匹配证书的altnames Node.js的
  14. 计算机垃圾清理指令,win7电脑清理垃圾的运行命令代码是什么
  15. phalapi做登录检测_欢迎使用PhalApi!
  16. 论文笔记1 MOEFL Multi-objective Evolutionary Federated Learning
  17. kuka机器人三种运动编程
  18. Debian 制作U盘安装盘启动器
  19. 2020 年 10 月编程语言排行榜
  20. bolt在java_Storm Bolt接口

热门文章

  1. mysql网上图书销售_PHP+MySQL网上书店|网上图书销售系统
  2. XRD测试常见问题及解答(一)
  3. ssm社区线上超市购物系统毕业设计-附源码211704
  4. PDF是什么格式?如何编辑PDF文件?
  5. mysql-connector-java-8.0.26.jar MySQLJDBC下载
  6. 纯前端表格控件SpreadJS——轻松搞定数据绑定
  7. FTP测试手机软件画画教程图片,「推荐」手机、平板绘画党福利!10个非常好用的绘画App赶紧试试...
  8. Linux版MySQL下载教程
  9. 细胞自动机 通用计算机,科学网—《走近混沌》-27-初级细胞自动机 - 张天蓉的博文...
  10. C语言-筛法求100以内素数