详解Pandas 处理缺失值指令大全


Posted in Python onJuly 30, 2020

前言

运用pandas 库对所得到的数据进行数据清洗,复习一下相关的知识。

1 数据清洗

1.1 处理缺失数据

对于数值型数据,分为缺失值(NAN)和非缺失值,对于缺失值的检测,可以通过Python中pandas库的Series类对象的isnull方法进行检测。

import pandas as pd
import numpy as np
string_data = pd.Series(['Benzema', 'Messi', np.nan, 'Ronaldo'])
string_data.isnull()

对于缺失值,除了np.nan来表示,还可以用None来表示缺失值

string_data = None

1.2 滤除掉缺失数据

1.2.1 对于Series

使用dropna方法将NAN的数据过滤掉。

from numpy import nan as NA
import pandas as pd
data = pd.Series([1,NA,4.5,NA,5])
data.dropna()

另一种方法是使用布尔值索引对NAN数据进行过滤:

data[data.notnull()]

1.2.2 对于DataFrame

dropna()方法对于DataFrame的数据来说,会将含有NAN数据的行全部扔掉。

data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA],
           [NA, NA, NA], [NA, 6.5, 3.]])
data
data.dropna()

如果只想删除掉那些行中全部为NAN数据的DataFrame,通过设置dropna()方法中的参数how即可。

data.dropna(how = 'all')

如果操作对象变为列,代码如下:

data[4] = NA
data
data.dropna(axis=1, how = 'all')

如果想留下其中的一部分数据,则可以设置thresh参数:

df = pd.DataFrame(np.random.randn(7, 3))
df.iloc[:4, 1] = NA
df.iloc[:2, 2] = NA
df
df.dropna(thresh = 2)

thresh = n,参数n相当于保留至少含有n个非NA的行

1.3 填充缺失数据

fillna(n),n替换掉NA

df = pd.DataFrame(np.random.randn(7, 3))
df.fillna(0)

如果填充格式是字典,fillna({0:n1,1:n2}),将列0的NA填充为 n1,将列1的NA填充为 n2。

df.fillna({{1 : 0.2,2 : 0.3}})

直接填充df的NA值,直接改变df,不需要命名新的变量。

df.fillna(0, inplace = True)

2 数据转换

2.1 移除重复数据

data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'],
           'k2': [1, 1, 2, 3, 3, 4, 4]})
data.duplicated()

返回的是每一行的重复结果,不重复是False,重复是True。

如果要去除重复的行,代码如下:

data.drop_duplicates()

如果操作对象为列,在duplicated方法中指定参数即可。

data['k3'] = range(7)
data.duplicated(['k1'])

返回的是 k1 列中重复的元素。

对于drop_duplicates()方法来说,去除掉的是重复数据的后者。比如说序号为0,1的数据重复,方法删除掉index = 1的行。如果想要删除前者,只需要指定参数 last即可:

data.drop_duplicates(['k1'], keep = 'last')

2.2 与映射相结合

map函数的使用方法

list(map(lambda x : 2 * x , range(10)))

2.3 替换

使用的是replace 方法,replace有两个参数,前者是被替换的数,后者是替换的数,参数格式可以是列表,也可以是字典

data = pd.Series([1., -999., 2., -999., -1000., 3.])
data.replace(-999.0, np.nan) #替换单个值
data.replace([-999.0, -1000.0], np.nan) #用一个值替换多个值
data.replace([-999.0, -1000.0],[np.nan, 0]) # 用不同值替换不同值
data.replace({-999.0 : 0, -1000.0 : np.nan}) # 格式为字典

2.4 创建数据的修改版

rename方法可以创建数据的修改版,而不必在原数据上进行修改。

data.rename(index=str.title, columns=str.upper)

还可以使用字典的格式,对index, columns 进行改变。

data.rename(index = {'OHIO': 'INDIANA'}, columns = {'three': 'peekaboo'})

这样的重命名并不对原数据进行修改,如果想要直接改变data, 如上,参数inplace = True即可。

data.rename(index = {'OHIO': 'INDIANA'}, columns = {'three': 'peekaboo'}, inplace = True)
data

这样就改变了data。

2.5 计算指标\哑变量

用于机器学习中,对定类数据的转化,用于将df中的object对象转化为One-hot编码,消除了数字间的比较大小问题。

df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'],
          'data1': range(6)})
pd.get_dummies(df['key']) # 分解了key 列,分开了三个属性

如果想在分开的属性前面加上前缀的话,设定prefix 参数即可实现该功能,可以将其与原始数据合并在一起。

dummies = pd.get_dummies(df['key'], prefix = 'key')
df_with_dummies = df['data1'].join(dummies)
df_with_dummies

到此这篇关于详解Pandas 处理缺失值指令大全 的文章就介绍到这了,更多相关Pandas 处理缺失值内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python入门篇之正则表达式
Oct 20 Python
Python实现Tab自动补全和历史命令管理的方法
Mar 12 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
python浪漫表白源码
Apr 05 Python
python使用turtle绘制国际象棋棋盘
May 23 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 Python
python openssl模块安装及用法
Dec 06 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 Python
Python 爬虫的原理
Jul 30 #Python
Python爬虫与反爬虫大战
Jul 30 #Python
Python如何将装饰器定义为类
Jul 30 #Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 #Python
Python3爬虫发送请求的知识点实例
Jul 30 #Python
详解Python 最短匹配模式
Jul 29 #Python
Python如何给你的程序做性能测试
Jul 29 #Python
You might like
第八节--访问方式
2006/11/16 PHP
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
jQuery toggle()设置CSS样式
2009/11/05 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
使用Python解析JSON数据的基本方法
2015/10/15 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
电子商务专业学生的自我鉴定
2013/11/28 职场文书
考试违纪检讨书
2014/02/02 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
绿色出行口号
2014/06/18 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
学生会工作感言
2015/08/07 职场文书
教师听课学习心得体会
2016/01/15 职场文书
详解Vue的options
2021/05/15 Vue.js
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android