在大多数的数据分析应用中,经常会遇到缺失值,常见的缺失值处理方式有过滤和填充。在 Python 中,pandas 使用浮点值 NaN 表示浮点数和非浮点数组中的缺失值,同时 Python 内置 None 值也会被当作缺失值。在处理缺失值之前,首先要判断缺失值是否存在,然后再对缺失值进行删除、填充或者不处理的操作。

判断缺失值的函数

在 pandas 中判断缺失值的函数如下。

1) isnull() 函数

isnull() 函数语法格式:isnull(obj)。其中,参数 obj 表示接收标量或数组,用于检查空值或缺失值的对象;如果有空值或缺失值则返回 True,否则返回 False。

2) notnull() 函数

notnull() 函数语法格式:notnull(obj)。其中,参数 obj 接收 ndarray 或对象值,用于检查不为空值或缺失值的对象;如果有空值或缺失值则返回 False,否则返回 True。

通过 isnull() 函数和 sum() 函数可以获得 Series 和 DataFrame 中缺失值的数量。

处理缺失值的方法

数据缺失值的处理方法有以下 3 种:

删除含有缺失值的记录;

进行数据插补;

不处理空值或缺失值。

1) 删除含有缺失值的记录

在数据分析中,如果数据集的样本很大,并且在删除含有缺失值的记录后,不会影响分析结果的客观性和准确性时,一般使用 dropna() 函数直接将空值或缺失值的数据删除。

dropna() 函数的语法格式如下。

DataFrame.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)

函数中的参数说明如下:

axis:指定删除方向,当 axis=0 按行删除,axis=1 按列删除,默认为 0;

how:取值为“all”表示这一行或列中的元素全部缺失(为 NaN)才删除这一行或列;取值为“any”表示这一行或列中只要有缺失值,就删除这一行或列;

thresh:一行或一列中至少出现了 thresh 个才删除;

subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值的列或行不会被删除;

inplace:筛选缺失值后,获得的新数据是存为副本还是直接在原数据上进行修改。

【例 1】导入 Excel 成绩表 grade.xls 中的 grade1 表,完成各种不同情况下删除缺失值的操作。

其示例代码 test1.py 如下。

# -*- coding: utf-8 -*-

import pandas as pd

#导入成绩数据

df = pd.read_excel('d:\data\grade.xls',sheet_name='grade1')

#所有值全为缺失值才删除

df1 = df.dropna(how='all')

#输出df1的前5行

print(df1.head())

#删除至少出现过两个缺失值的行

df1 = df.dropna(thresh=2,axis=0)

#输出df1的前10行

print(df1.head(10))

#删除subset中指定的列含有缺失值的行

df1 = df.dropna(subset=['exam'])

#输出df1的前5行

print(df1.head())

#删除含有缺失值的列

print(df.dropna(axis=1))

#只要有缺失值就删除,并且直接在原数据上进行修改

df1 = df.dropna(how='any',inplace=True)

print(df)

2) 数据插补法

在数据分析中,如果数据集的样本比较少或者由于删除含有缺失值的记录,会影响到数据分析结果的客观性和准确性,就需要根据数据插补的方法来选择填充值,然后再使用 fillna() 函数对空值或缺失值进行填充。

fillna() 函数的语法格式如下。

DataFrame.fillna(value=None,method=None,axis=None,

inplace=False,limit=None,downcast=None,**kwargs)

函数中的参数说明如下。

value:接收常数、dict、Series 或 DataFrame,表示填充缺失值的值。

method:表示填充缺失值的方法,method 的取值为{'pad','ffill','backfill','bfill',None}。pad/ffill:用前一个非缺失值去填充该缺失值。backfill/bfill:用下一个非缺失值去填充该缺失值。None:指定一个值去替换缺失值(缺省默认这种方式)。

axis:指定填充方向,当 axis=1 按列填充,axis=0 按行填充。

inplace:接收 True 或 False。True 表示直接修改原对象,False 表示创建一个副本,修改副本,原对象不变,默认为 False。

limit:表示限制填充的个数,如果 limit=2,则只填充两个缺失值。

downcast:默认为 None,如果需要将填充的值向下转换为适当的相等数据类型的数值,如将 float64 数据类型转换为 int64 数据类型时,则此参数的值为  'infer'。

注意:method 参数不能与 value 参数同时出现。

在选取填补缺失值的数据时,除了选择常量 0 或者通过指定 method 方式来选择填充缺失值的数据外,还可以根据数据插补方法来选择填充值。常用数据插补方法见表 1。

表 1:数据插补方法

插补方法

描述

均值/中位数/众数插补

根据属性值的类型,用该属性取值的均值/中位数/众数进行插补

使用固定值

将缺失值属性使用一个常量值替换

最近临插补

在记录中找到与缺失样本最接近的样本的该属性值插补

回归方法

对带有缺失值的变量,根据已有的数据和与其有关的其他变量(因变量)的数据建立拟合模型来预测缺失的属性值

插值法

插值法是利用已知点建立常用的插值函数 f(x),未知值由对应点 x 求岀的函数值 f(x) 近似替代

【例 2】导入 Excel 成绩表 grade.xls 中的grade1 表,完成以下操作。

1) 查看该表前 5 行的缺失值,分别用常数 0 和字典填充缺失值,但不修改原数据。

2) 分别指定不同的 method 参数,观察填充缺失值情况。

3) 将 Normal 属性的缺失值用中位数替换,exam 属性的缺失值用均值替换。

4) 用常数 0 填充缺失值,并修改原数据。

其示例代码 test2.py 如下。

# -*- coding: utf-8 -*-

import pandas as pd

#导入成绩数据

df = pd.read_excel('d:\data\grade.xls',sheet_name='grade1')

#1.查看前面5行

print(df.head())

#2.查看缺失值的数量

print(df.isnull().sum())

#3.用常量0填充

df1 = df.fillna(0)

print(df1.head())

#4.用字典填充

df2 = df.fillna({'Normal':60,'exam':40})

print(df2.head()) #修改副本

#观察原来数据df没有改变

print(df.head())

#5.指定method = 'ffill'/'pad':用前一个非缺失值去填充该缺失值

df2 = df.fillna(method='ffill')

print(df2.head())

#指定method = 'bfill'/'backfill':用下一个非缺失值填充该缺失值

df2 = df.fillna(method='bfill')

print(df2.head())

#6.将exam列的缺失值用均值替换

exa_mea = df['exam'].fillna(df['exam'].mean())

print(exa_mea.head())

#将Normal列的缺失值用中位数替换

Nor_med = df['Normal'].fillna(df['Normal'].median())

print(Nor_med.head())

#7.指定inplace参数为True

print(df.fillna(0,inplace=True))

#观察原来数据df发生改变

print(df.head())

python pandas缺失值处理_pandas缺失值的处理相关推荐

  1. python pandas excel 排序_Pandas 按组汇总和列排序 - python

    给定以下数据框 In [31]: rand = np.random.RandomState(1) df = pd.DataFrame({'A': ['foo', 'bar', 'baz'] * 2, ...

  2. python pandas dropna 删除空值/缺失值(DataFrame)

    文章目录 一.函数参数 二.例子详解 2.1 载入库 2.2 构建一个DataFrame 2.3 默认参数 2.4 axis 2.5 how 2.6 thresh 2.7 subset 一.函数参数 ...

  3. python pandas 官网_Pandas 最详细教程

    Python 是开源的,它很棒,但是也无法避免开源的一些固有问题:很多包都在做(或者在尝试做)同样的事情.如果你是 Python 新手,那么你很难知道某个特定任务的最佳包是哪个,你需要有经验的人告诉你 ...

  4. python pandas 日期格式_pandas 快速处理 date_time 日期格式方法

    当数据很多,且日期格式不标准时的时候,如果pandas.to_datetime 函数使用不当,会使得处理时间变得很长,提升速度的关键在于format的使用.下面举例进行说明: 示例数据: date 格 ...

  5. python pandas 分类汇总_pandas去重复行并分类汇总的实现方法

    今天主要记录一下pandas去重复行以及如何分类汇总.以下面的数据帧作为一个例子: import pandas as pd data=pd.DataFrame({'产品':['A','A','A',' ...

  6. python pandas文档_Pandas 中文API文档

    缩写和包导入 在这个速查手册中,我们使用如下缩写: df:任意的Pandas DataFrame对象 s:任意的Pandas Series对象 同时我们需要做如下的引入: import pandas ...

  7. python pandas dataframe函数_Pandas的DataFrame列操作

    13. Pandas的DataFrame列操作 本章主要研究一下DataFrame数据结构如何修改.增删等操作. 13.1 rename修改列名字 对一个dataframe的数据使用rename函数后 ...

  8. python pandas 日期计算_pandas dataframe 日期间隔天数计算问题

    dataframe中有两列数据'begin_date'和'end_date',现在通过这两列计算新的一列'work_days'. 'begin_date'和'end_date'的数据格式均为:Time ...

  9. python pandas缺失值处理_Pandas之缺失值处理

    原标题:Pandas之缺失值处理 本文作者:杨长青 本文编辑:周聪聪 技术总编:张学人 好消息!!!爬虫俱乐部将于2019年5月2日至4日在武汉举行Stata编程技术五一训练营,此次采用理论与案例相结 ...

  10. pandas用众数填充缺失值_7步搞定数据清洗-Python数据清洗指南

    脏数据就是在物理上临时存在过,但在逻辑上不存在的数据. 数据清洗是整个数据分析过程的第一步,就像做一道菜之前需要先择菜洗菜一样.数据分析师经常需要花费大量的时间来清洗数据或者转换格式,这个工作甚至会占 ...

最新文章

  1. ajax异步后台存放购物车表,jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)...
  2. eclipse如何修改dynamic web module version
  3. 防盗链测试01 - Jwplayer+Tengine2.3.1 mp4模块打造流媒体测试服务器
  4. Node.js中package.json中库的版本号详解(^和~区别)
  5. 音视频技术开发周刊 | 162
  6. 【TensorFlow】TensorFlow从浅入深系列之十 -- 教你认识卷积神经网络的基本网路结构及其与全连接神经网络的差异
  7. 【Nginx】实现负载均衡的几种方式
  8. ssm架构 开源项目_如何为您的开源项目选择正确的品牌架构
  9. Unity NGUI 之 UIScrollView 基本用法
  10. java中check和uncheck异常处理
  11. perl统计日志文件ip及数量
  12. C语言基础知识点复习
  13. MMC,SD,MINI SD,SDHC,SDHC的区别总结
  14. 有python专业的世界大学_大数据时代专业怎么选?2018年QS世界大学商业分析硕士专业排名...
  15. ArcGIS教程:对镶嵌数据集进行色彩平衡
  16. 根据汉字获取它的字符串拼音首字母(大写),含多音字
  17. 华为java面试题目
  18. 很不懂 对网络上面的话很不懂
  19. 微信小程序录音功能实现、录音转文字(接口与插件的实现)
  20. SAS 二元逻辑回归 预测下月是否会消费

热门文章

  1. 相比普通XRD,同步辐射原位XRD的优势有哪些?
  2. 如何用C#做一个类似于桌面插件的程序(转)
  3. Data Matrix码
  4. C#文字播放语音功能System.Speech类库的使用
  5. 真正厉害的人,都是“反内耗”体质
  6. 运筹学系列(一)纳什均衡与最大最小博弈
  7. EPT和VPID简介
  8. 【Unity】基础知识结构总结
  9. 使用pathogen安装vim插件nerdtreee
  10. 东南大学计算机考研面试题,东南大学复试常问问题今天的模拟面试总结