Python pandas DataFrame基础运算及空值填充详解

目录
  • 前言
  • 数据对齐
  • fill_value
  • 空值api
    • dropna
    • fillna
  • 总结

前言

今天我们一起来聊聊DataFrame中的索引。

上一篇文章当中我们介绍了DataFrame数据结构当中一些常用的索引的使用方法,比如iloc、loc以及逻辑索引等等。今天的文章我们来看看DataFrame的一些基本运算。

数据对齐

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

首先我们来创建两个DataFrame:

import numpy as np
import pandas as pd

df1 = 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、div这些我们都很好理解,那么这里的radd、rsub方法又是什么意思呢,为什么前面要加上一个r呢?

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

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

我们可以在add、div这些方法当中传入一个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的时候,最后一行也无法填充。

总结

今天的文章当中我们主要介绍了DataFrame的一些基本运算,比如最基础的四则运算。在进行四则运算的时候由于DataFrame之间可能存在行列索引不能对齐的情况,这样计算得到的结果会出现空值,所以我们需要对空值进行处理。我们可以在进行计算的时候通过传入fill_value进行填充,也可以在计算之后对结果进行fillna填充。

在实际的运用当中,我们一般很少会直接对两个DataFrame进行加减运算,但是DataFrame中出现空置是家常便饭的事情。因此对于空值的填充和处理非常重要,可以说是学习中的重点,大家千万注意。

到此这篇关于Python pandas DataFrame基础运算及空值填充的文章就介绍到这了,更多相关pandas DataFrame空值填充内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python pandas分割DataFrame中的字符串及元组的方法实现

    目录 1.使用str.split()方法 2.使用join()与split()方法结合 3.使用apply方法分割元组 1.使用str.split()方法 可以使用pandas 内置的 str.split() 方法实现分割字符串类型的数据,并将分割结果写入DataFrame中,以表格形式呈现. 语法: Series.str.split(pat=None, n=-1, expand=False) 其中,pat是字符串或正则表达式,n是一个整数数字,默认为-1.为0或-1时即为最大次数的分割.其他数

  • python Pandas之DataFrame索引及选取数据

    目录 1.索引是什么 1.1 认识索引 1.2 自定义索引 2. 索引的简单使用 2.1 列索引 2.2 行索引 2.2.1 使用[ ] 2.2.2 使用.loc()和.iloc() 1.索引是什么 1.1 认识索引 先创建一个简单的DataFrame. myList = [['a', 10, 1.1], ['b', 20, 2.2], ['c', 30, 3.3], ['d', 40, 4.4]] df1 = pd.DataFrame(data = myList) print(df1) ---

  • Python数据分析之 Pandas Dataframe条件筛选遍历详情

    目录 一.条件筛选 二.Dataframe数据遍历 for...in...语句 iteritems()方法 iterrows()方法 itertuples()方法 一.条件筛选 查询Pandas Dataframe数据时,经常会筛选出符合条件的数据,接下来介绍一下具体的使用方式. 示例Dataframe如下: 单条件筛选,例如查询gender为woman的数据: df[df["gender"]=="woman"] # 或 df.loc[df["gender

  • Python数据分析之 Pandas Dataframe合并和去重操作

    目录 一.之 Pandas Dataframe合并 二.去重操作 一.之 Pandas Dataframe合并 在数据分析中,避免不了要从多个数据集中取数据,那就避免不了要进行数据的合并,这篇文章就来介绍一下 Dataframe 对象的合并操作. Pandas 提供了merge()方法来进行合并操作,使用语法如下: pd.merge(left, right, how="inner", on=None, left_on=None, right_on=None, left_index=Fa

  • Python数据分析Pandas Dataframe排序操作

    目录 1.索引的排序 2.值的排序 前言: 数据的排序是比较常用的操作,DataFrame 的排序分为两种,一种是对索引进行排序,另一种是对值进行排序,接下来就分别介绍一下. 1.索引的排序 DataFrame 提供了sort_index()方法来进行索引的排序,通过axis参数指定对行索引排序还是对列索引排序,默认为0,表示对行索引排序,设置为1表示对列索引进行排序:ascending参数指定升序还是降序,默认为True表示升序,设置为False表示降序, 具体使用方法如下: 对行索引进行降序

  • Python pandas.DataFrame 找出有空值的行

    0.摘要 pandas中DataFrame类型中,找出所有有空值的行,可以使用.isnull()方法和.any()方法. 1.找出含有空值的行 方法:DataFrame[DataFrame.isnull().T.any()] 其中,isnull()能够判断数据中元素是否为空值:T为转置:any()判断该行是否有空值. import pandas as pd import numpy as np n = np.arange(20, dtype=float).reshape(5,4) n[2,3]

  • Python pandas.DataFrame调整列顺序及修改index名的方法

    1. 从字典创建DataFrame >>> import pandas >>> dict_a = {'user_id':['webbang','webbang','webbang'],'book_id':['3713327','4074636','26873486'],'rating':['4','4','4'],'mark_date':['2017-03-07','2017-03-07','2017-03-07']} >>> df = pandas.

  • python pandas.DataFrame.loc函数使用详解

    官方函数 DataFrame.loc Access a group of rows and columns by label(s) or a boolean array. .loc[] is primarily label based, but may also be used with a boolean array. # 可以使用label值,但是也可以使用布尔值 Allowed inputs are: # 可以接受单个的label,多个label的列表,多个label的切片 A singl

  • Python pandas DataFrame基础运算及空值填充详解

    目录 前言 数据对齐 fill_value 空值api dropna fillna 总结 前言 今天我们一起来聊聊DataFrame中的索引. 上一篇文章当中我们介绍了DataFrame数据结构当中一些常用的索引的使用方法,比如iloc.loc以及逻辑索引等等.今天的文章我们来看看DataFrame的一些基本运算. 数据对齐 我们可以计算两个DataFrame的加和,pandas会自动将这两个DataFrame进行数据对齐,如果对不上的数据会被置为Nan(not a number). 首先我们来

  • Python pandas中apply函数简介以及用法详解

    目录 1.基本信息 2.语法结构 3.使用案例 3.1 DataFrame使用apply 3.2 Series使用apply 3.3 其他案例 4.总结 参考链接: 1.基本信息 ​ Pandas 的 apply() 方法是用来调用一个函数(Python method),让此函数对数据对象进行批量处理.Pandas 的很多对象都可以使用 apply() 来调用函数,如 Dataframe.Series.分组对象.各种时间序列等. 2.语法结构 ​ apply() 使用时,通常放入一个 lambd

  • pandas dataframe 中的explode函数用法详解

    在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/bin/env python # -*- coding:utf-8 -*- # create on 18/4/13 import pandas as pd def dataframe_explode(dataframe, fieldname): temp_fieldname = fieldname

  • Python Pandas学习之数据离散化与合并详解

    目录 1数据离散化 1.1为什么要离散化 1.2什么是数据的离散化 1.3举例股票的涨跌幅离散化 2数据合并 2.1pd.concat实现数据合并 2.2pd.merge 1 数据离散化 1.1 为什么要离散化 连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数.离散化方法经常作为数据挖掘的工具. 1.2 什么是数据的离散化 连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值. 离散化有

  • python Pandas库基础分析之时间序列的处理详解

    前言 在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据,比如量化交易就是从历史数据中寻找股价的变化规律.Python中自带的处理时间的模块有datetime,NumPy库也提供了相应的方法,Pandas作为Python环境下的数据分析库,更是提供了强大的日期数据处理的功能,是处理时间序列的利器. 1.生成日期序列 主要提供pd.data_range()和pd.period_range()两个方法,给定参数有起始时间.结束时间.生成时期的数目及时

  • Python pandas实现excel工作表合并功能详解

    import os,pandas as pd,re #1.获取文件夹下要合并的文件名 dirpath = '文件夹地址' #工作表3特殊处理 需要开始下标和结束下标 begin = 231 end = 238 excel_names = os.listdir(dirpath) #2.获取文件内容 sheet_1_merge = [] sheet_2_merge = [] sheet_3_merge = pd.DataFrame([0,0,0,0,0,0,0]) for excel_name in

  • Python pandas之求和运算和非空值个数统计

    目录 准备工作 1.非空值计数 1.1对全表进行操作 1.1.1求取每列的非空值个数 1.1.2 求取每行的非空值个数 1.2 对单独的一行或者一列进行操作 1.2.1 求取单独某一列的非空值个数 1.2.2 求取单独某一行的非空值个数 1.3 对多行或者多列进行操作 1.3.1 求取多列的非空值个数 1.3.2 求取多行的非空值个数 2 sum求和 2.1对全表进行操作 2.1.1对每一列进行求和 2.1.2 对每一行进行求和 2.2 对单独的一行或者一列进行操作 2.2.1 对某一列进行求和

  • 对Pandas DataFrame缺失值的查找与填充示例讲解

    查看DataFrame中每一列是否存在空值: temp = data.isnull().any() #列中是否存在空值 print(type(temp)) print(temp) 结果如下,返回结果类型是Series,列中不存在空值则对应值为False: <class 'pandas.core.series.Series'> eventid False iyear False imonth False iday False approxdate True extended False reso

  • python pandas dataframe 行列选择,切片操作方法

    SQL中的select是根据列的名称来选取:Pandas则更为灵活,不但可根据列名称选取,还可以根据列所在的position(数字,在第几行第几列,注意pandas行列的position是从0开始)选取.相关函数如下: 1)loc,基于列label,可选取特定行(根据行index): 2)iloc,基于行/列的position: 3)at,根据指定行index及列label,快速定位DataFrame的元素: 4)iat,与at类似,不同的是根据position来定位的: 5)ix,为loc与i

随机推荐