原标题:Pandas之缺失值处理

本文作者:杨长青

本文编辑:周聪聪

技术总编:张学人

好消息!!!爬虫俱乐部将于2019年5月2日至4日在武汉举行Stata编程技术五一训练营,此次采用理论与案例相结合的方式,旨在帮助大家熟悉Stata数据分析技巧,能够通过编程读取不同类型的数据源、实现复杂数据合并、清洗的程序化,并且熟悉Stata核心的爬虫技术。

当我们用python进行数据处理时会遇到很多缺失值,缺失值一般是由于我们所处理的数据本身的特性、当初录入的失误或者其它原因导致的,比如读入数据的空值、做0/0等计算时这些数据都被处理成缺失值。对于缺失值我们的处理或者直接删除或者进行填补,今天我们来介绍几个基础的缺失值处理函数:

dropna:删除缺失值

isna、notna:判断缺失值

fillna、interpolate:填补缺失值

接下来我们结合具体的例子来详细介绍上述函数用法。在DataFrame中缺失值的标签一般为NAN(not a number)。可以沿用numpy中np.nan定义缺失值。我们构造一个包含缺失值的简单例子:

importnumpy asnp

importpandas aspd

dict1={'make':['AMC Concord', np.nan,'AMC Spirit',np.nan,'Buick Electra ','AMC Pacer'],

'price':[4099,4749,np.nan,7824,np.nan,2154],

'rep78':[3,4,np.nan,5,np.nan,5]} #通过np.nan生成缺失值

auto=pd.DataFrame(dict1)

auto #展示auto

数据如下:

一、删除缺失值

dropna的语法介绍:

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

axis:确定删除缺失值的行或列。axis=0:删除包含缺失值的行。axis=1:删除包含缺失值的列。

how:删除方式。how=’any’:删除包含缺失值的行或列。how=’all’:只有行或列都为缺失值才会被删除。

thresh:设置需要的非缺失值。当thresh=2:保存包含至少有两个非缺失值的行或列。

subset:沿着其他轴考虑的标签。假设删除行,可以指定subset=[‘make’]:删除缺失make变量数据的行。

inplace:是否对原数据集进行处理替换。inplace=True替换修改原对象。

对于上面的例子,我们想要删除price和rep78为空的观测,只需:

auto.dropna(subset=['make','rep78'])

最终输出如下:

二、判断缺失值

isna用来判断DataFrame元素是否大小写,返回相同大小的对象,如果是缺失值则为True,否则为False。而notna刚好相反,如果是缺失值则为False,否则为True。下面两图是auto数据集使用isna和notna判断的结果:

在数据处理的过程中,经常是要对各个特征下数据缺失的多少进行一个判断,对于缺失数较多的特征我们一般不会使用。isna很方便我们对缺失值进行统计,并按缺失值的比重排列。程序如下:

na_count = auto.isnull().sum().sort_values(ascending=False) #对bool数据进行累加并从大到小排列

na_rate = na_count / len(auto) #计算比率

na_data = pd.concat([na_count,na_rate],axis=1,keys=['count','ratio'])

na_data

输出如下:

三、填补缺失值

fillna的主要语法如下:

DataFrame.fillna(value = None,method= None, inplace= False,limit =None)

value:用于指定用何值填充缺失值。可以是一个标量,如value=0,用0填补所有缺失值。可以是一个字典,键为需要填充的列名,值为需要填充的内容。

method:指定填充的方式。method='ffill':用前面的补齐后面的缺失值。method='bfill' :用下一个非缺失值填充该缺失值。

inplace:如上定义。

limit:在指定method时,控制向前或向后填充缺失值的最大数量。

对于上述例子,我们将price和rep78的缺失值分别用均值和中位数进行替换:

value={'price':auto.price.mean(),

'rep78':auto.rep78.median() } #分别计算均值个中位数

auto.fillna(value)

替换之后,如下所示:

同时还可以使用插值法对缺失值进行填补,通过interpolate函数完成,默认为线性插值,即method='linear'。除此之外,还有‘linear’、‘time’等插值方法可供选择。这里我们就不再详细介绍。

以上介绍如何通过 Pandas 处理数据集中的缺失值,包括识别、删除、填补。如果大家在学习使用python的过程中有什么问题,可以通过邮件与我们进行联系。

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

投稿要求:

1)必须原创,禁止抄袭;

2)必须准确,详细,有例子,有截图;

注意事项:

1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。

3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。返回搜狐,查看更多

责任编辑:

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 如何找到NaN、缺失值或者某些元素的索引名称以及位置,np.where的使用

    我们在处理数据的时候,经常需要检查数据的质量,也需要知道出问题的数据在哪个位置.我找了很久,也尝试了很多办法,都没能找到一种非常直接的函数,本文所要介绍的是一种我认为比较方便的方法:np.where( ...

  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模块介绍以及使用,dataframe结构,Series结构,基本数据操作,DataFrame运算,pandas画图,存储,缺失值处理,离散化,合并

    目录 1 pandas介绍 1.1 Pandas介绍 1.2 为什么使用Pandas 1.3 案例:在numpy当中创建的股票涨跌幅数据形式 1.4 DataFrame 1.4.1 DataFrame ...

最新文章

  1. 编写有效的事条指导原则
  2. java 原生数据类型的转换_Java基本数据类型转换分析
  3. [异常解决] ubuntu上安采用sudo启动的firefox,ibus输入法失效问题解决
  4. Gym - 215177C 玩游戏
  5. 为什么要重写hashCode()方法和equals()方法以及如何进行重写
  6. CodeForces Contest #1114: Round #538 (Div. 2)
  7. nginx+redis 实现 jsp页面缓存,提升系统吞吐率
  8. 点云孔洞定位_隧道三维点云孔洞修复方法
  9. el-dropdown的command需要传入多个参数的解决方案
  10. 虚拟地址空间和物理地址空间
  11. 淘宝APP用户体系运营拆解​
  12. 如何将eclipse项目和svn关联(从服务器取项目)
  13. MySQL 教程(三)函数
  14. CentOS6安装rpm时报错“Cannot find a valid baseurl for repo: centos-sclo-rh“的解决办法
  15. 【MySQL从删库到跑路】-1-安装MySQL-5.7
  16. 定时任务 未执行完不执行下一个任务
  17. 如何快速学习一门新技术
  18. 平方米用计算机怎么打,平方厘米用电脑怎么打
  19. 光与影的地平线:手机AI摄影全析
  20. 微波射频学习笔记21-------三极管

热门文章

  1. java write int,void write(byte[] b, int off, int len)
  2. 我的世界java怎么玩起床战争_我的世界怎么玩起床战争_我的世界起床战争怎么玩_52pk单机游戏...
  3. c语言 Nimm game算法,尼姆博奕(Nimm Game)
  4. java compareandset 包_Java AtomicReferenceArray compareAndSet()用法及代码示例
  5. Windows10安装ubuntu18.04双系统教程
  6. Obtain a Permutation(思维)
  7. android数据存储心得,android学习心得 轻量级存储SharePreferences
  8. excel python插件_利用 Python 插件 xlwings 读写 Excel
  9. 软件工程---第四章---形式化分析
  10. sharepointa嵌入HTML网页,显示存储在SharePoint文档文件夹中的HTML页面