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 相关文章推荐
操作Windows注册表的简单的Python程序制作教程
Apr 07 Python
python实现用户登录系统
May 21 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
python实现简单加密解密机制
Mar 19 Python
python中的print()输出
Apr 12 Python
Python csv文件的读写操作实例详解
Nov 19 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 24 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 Python
python 详解turtle画爱心代码
Feb 15 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
php 传值赋值与引用赋值的区别
2010/12/29 PHP
php多文件上传实现代码
2014/02/20 PHP
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
PHP可变函数学习小结
2015/11/29 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
js 幻灯片的实现
2011/12/06 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
Python通过future处理并发问题
2017/10/17 Python
python去掉空白行的多种实现代码
2018/03/19 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
python爬取抖音视频的实例分析
2021/01/19 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
zooplus意大利:在线宠物商店
2019/08/07 全球购物
如何选择使用结构还是类
2014/05/30 面试题
大学生职业生涯规划书范文
2014/01/14 职场文书
挂科检讨书范文
2014/02/20 职场文书
动物科学专业求职信
2014/07/27 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
python实现简单聊天功能
2021/07/07 Python