详解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中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
简单介绍Python中的struct模块
Apr 28 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
详解django中使用定时任务的方法
Sep 27 Python
解析Python的缩进规则的使用
Jan 16 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
python爬取酷狗音乐排行榜
Feb 20 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
超级详细实用的pycharm常用快捷键
May 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
js中document.write和document.writeln的区别
2018/03/11 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
python实现12306火车票查询器
2017/04/20 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
管道维修工岗位职责
2013/12/27 职场文书
电信营业员自我评价分享
2014/01/17 职场文书
管理建议书范文
2014/05/13 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
教育教学工作反思
2016/02/24 职场文书
golang 实用库gotable的具体使用
2021/07/01 Golang