详解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 & Flask 实现RESTful Web API的实例
Sep 19 Python
Django中的ajax请求
Oct 19 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
Python any()函数的使用方法
Oct 28 Python
python 解决print数组/矩阵无法完整输出的问题
Feb 19 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
python pip如何手动安装二进制包
Sep 30 Python
python实现AdaBoost算法的示例
Oct 03 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
如何使用flask将模型部署为服务
May 13 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
php学习 字符串课件
2008/06/15 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
javascript some()函数用法详解
2014/11/13 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
详细解读Python中的__init__()方法
2015/05/02 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python机器学习之贝叶斯分类
2018/03/26 Python
Python如何对XML 解析
2020/06/28 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
HTTP状态码详解
2021/03/18 杂记
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
行政主管岗位职责
2013/11/18 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
安全负责人任命书
2014/06/06 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
护士个人年终总结
2015/02/13 职场文书
党校个人总结
2015/03/04 职场文书
班委竞选稿范文
2015/11/21 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android