Pandas 缺失数据处理的实现


Posted in Python onNovember 04, 2019

数据丢失(缺失)在现实生活中总是一个问题。 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题。 在这些领域,缺失值处理是使模型更加准确和有效的重点。

使用重构索引(reindexing),创建了一个缺少值的DataFrame。 在输出中,NaN表示不是数字的值。

一、检查缺失值

为了更容易地检测缺失值(以及跨越不同的数组dtype),Pandas提供了isnull()和notnull()函数,它们也是Series和DataFrame对象的方法

示例1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3),
         index=['a', 'c', 'e', 'f','h'],
         columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print(df)
print('\n')

print (df['one'].isnull())

输出结果:

        one       two     three
a  0.036297 -0.615260 -1.341327
b       NaN       NaN       NaN
c -1.908168 -0.779304  0.212467
d       NaN       NaN       NaN
e  0.527409 -2.432343  0.190436
f  1.428975 -0.364970  1.084148
g       NaN       NaN       NaN
h  0.763328 -0.818729  0.240498

a    False
b     True
c    False
d     True
e    False
f    False
g     True
h    False
Name: one, dtype: bool

示例2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print (df['one'].notnull())

输出结果:
a     True
b    False
c     True
d    False
e     True
f     True
g    False
h     True
Name: one, dtype: bool

二、缺少数据的计算

  • 在求和数据时,NA将被视为0
  • 如果数据全部是NA,那么结果将是NA

实例1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print(df)
print('\n')

print (df['one'].sum())

输出结果:

        one       two     three
a -1.191036  0.945107 -0.806292
b       NaN       NaN       NaN
c  0.127794 -1.812588 -0.466076
d       NaN       NaN       NaN
e  2.358568  0.559081  1.486490
f -0.242589  0.574916 -0.831853
g       NaN       NaN       NaN
h -0.328030  1.815404 -1.706736

0.7247067964060545 

示例2

import pandas as pd

df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two'])

print(df)
print('\n')

print (df['one'].sum())

输出结果:

   one  two
0  NaN  NaN
1  NaN  NaN
2  NaN  NaN
3  NaN  NaN
4  NaN  NaN
5  NaN  NaN

0

三、填充缺少数据

Pandas提供了各种方法来清除缺失的值。fillna()函数可以通过几种方法用非空数据“填充”NA值。

用标量值替换NaN

以下程序显示如何用0替换NaN。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one','two', 'three'])

df = df.reindex(['a', 'b', 'c'])

print (df)
print('\n')

print ("NaN replaced with '0':")
print (df.fillna(0))

输出结果:

        one       two     three
a -0.479425 -1.711840 -1.453384
b       NaN       NaN       NaN
c -0.733606 -0.813315  0.476788

NaN replaced with '0':
        one       two     three
a -0.479425 -1.711840 -1.453384
b  0.000000  0.000000  0.000000
c -0.733606 -0.813315  0.476788

在这里填充零值; 当然,也可以填写任何其他的值。

替换丢失(或)通用值

很多时候,必须用一些具体的值取代一个通用的值。可以通过应用替换方法来实现这一点。用标量值替换NA是fillna()函数的等效行为。

示例

import pandas as pd

df = pd.DataFrame({'one':[10,20,30,40,50,2000],'two':[1000,0,30,40,50,60]})

print(df)
print('\n')

print (df.replace({1000:10,2000:60}))

输出结果:

    one   two
0    10  1000
1    20     0
2    30    30
3    40    40
4    50    50
5  2000    60

   one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60

填写NA前进和后退

使用重构索引章节讨论的填充概念,来填补缺失的值。

方法 动作
pad/fill 填充方法向前
bfill/backfill 填充方法向后

示例1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print(df)
print('\n')

print (df.fillna(method='pad'))

输出结果:

        one       two     three
a -0.023243  1.671621 -1.687063
b       NaN       NaN       NaN
c -0.933355  0.609602 -0.620189
d       NaN       NaN       NaN
e  0.151455 -1.324563 -0.598897
f  0.605670 -0.924828 -1.050643
g       NaN       NaN       NaN
h  0.892414 -0.137194 -1.101791

        one       two     three
a -0.023243  1.671621 -1.687063
b -0.023243  1.671621 -1.687063
c -0.933355  0.609602 -0.620189
d -0.933355  0.609602 -0.620189
e  0.151455 -1.324563 -0.598897
f  0.605670 -0.924828 -1.050643
g  0.605670 -0.924828 -1.050643
h  0.892414 -0.137194 -1.101791

示例2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print (df.fillna(method='backfill'))

输出结果:

        one       two     three
a  2.278454  1.550483 -2.103731
b -0.779530  0.408493  1.247796
c -0.779530  0.408493  1.247796
d  0.262713 -1.073215  0.129808
e  0.262713 -1.073215  0.129808
f -0.600729  1.310515 -0.877586
g  0.395212  0.219146 -0.175024
h  0.395212  0.219146 -0.175024

四、丢失缺少的值

使用dropna函数和axis参数。 默认情况下,axis = 0,即在行上应用,这意味着如果行内的任何值是NA,那么整个行被排除。

实例1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f','h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print (df.dropna())

输出结果 :

        one       two     three
a -0.719623  0.028103 -1.093178
c  0.040312  1.729596  0.451805
e -1.029418  1.920933  1.289485
f  1.217967  1.368064  0.527406
h  0.667855  0.147989 -1.035978

示例2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print (df.dropna(axis=1))

输出结果:

Empty DataFrame
Columns: []
Index: [a, b, c, d, e, f, g, h]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现ip查询示例
Mar 26 Python
pygame播放音乐的方法
May 19 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
python如何在终端里面显示一张图片
Aug 17 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
Apr 15 Python
python中import reload __import__的区别详解
Oct 16 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 Python
Python中请不要再用re.compile了
Jun 30 Python
详解python 内存优化
Aug 17 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
python tkinter canvas使用实例
Nov 04 #Python
python matplotlib饼状图参数及用法解析
Nov 04 #Python
python制作朋友圈九宫格图片
Nov 03 #Python
python使用yield压平嵌套字典的超简单方法
Nov 02 #Python
基于python实现从尾到头打印链表
Nov 02 #Python
pandas 空数据处理方法详解
Nov 02 #Python
python pyinstaller打包exe报错的解决方法
Nov 02 #Python
You might like
截获网站title标签之家内容的例子
2006/10/09 PHP
关于PHP5 Session生命周期介绍
2010/03/02 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
javascript回调函数详解
2018/02/06 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
Python中一行和多行import模块问题
2018/04/01 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
仓库门卫岗位职责
2013/12/22 职场文书
摄影展策划方案
2014/06/02 职场文书
中央空调节能方案
2014/06/15 职场文书
2014年班务工作总结
2014/12/02 职场文书
学校重阳节活动总结
2015/03/24 职场文书
防溺水主题班会教案
2015/08/12 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers