当前位置: 首页 > 编程日记 > 正文

Pandas缺失数据

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

何时以及为什么数据丢失?

想象一下有一个产品的在线调查。很多时候,人们不会分享与他们有关的所有信息。 很少有人分享他们的经验,但不是他们使用产品多久; 很少有人分享使用产品的时间,经验,但不是他们的个人联系信息。 因此,以某种方式或其他方式,总会有一部分数据总是会丢失,这是非常常见的现象。

现在来看看如何处理使用Pandas的缺失值(如NANaN)。

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) 
Python

执行上面示例代码,得到以下结果 -

        one       two     three
a  0.691764 -0.118095 -0.950871
b       NaN       NaN       NaN
c -0.886898  0.053705 -1.269253
d       NaN       NaN       NaN
e -0.344967 -0.837128  0.730831
f -1.193740  1.767796  0.888104
g       NaN       NaN       NaN
h -0.755934 -1.331638  0.272248
Shell

使用重构索引(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['one'].isnull()) 
Python

执行上面示例代码,得到以下结果 -

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

示例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()) 
Python

执行上面示例代码,得到以下结果 -

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

缺少数据的计算

  • 在求和数据时,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['one'].sum()) 
Python

执行上面示例代码,得到以下结果 -

-2.6163354325445014
Shell

示例2

import pandas as pd
import numpy as np df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two']) print (df['one'].sum()) 
Python

执行上面示例代码,得到以下结果 -

nan
Shell

清理/填充缺少数据

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 ("NaN replaced with '0':") print (df.fillna(0)) 
Python

执行上面示例代码,得到以下结果 -

        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
Shell

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

填写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.fillna(method='pad')) 
Python

执行上面示例代码,得到以下结果 -

        one       two     three
a  0.614938 -0.452498 -2.113057
b  0.614938 -0.452498 -2.113057
c -0.118390  1.333962 -0.037907
d -0.118390  1.333962 -0.037907
e  0.699733  0.502142 -0.243700
f  0.544225 -0.923116 -1.123218
g  0.544225 -0.923116 -1.123218
h -0.669783  1.187865  1.112835
Shell

示例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')) 
Python

执行上面示例代码,得到以下结果 -

        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
Shell

丢失缺少的值

如果只想排除缺少的值,则使用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()) 
Python

执行上面示例代码,得到以下结果 -

        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
Shell

示例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)) 
Python

执行上面示例代码,得到以下结果 -

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

替换丢失(或)通用值

很多时候,必须用一些具体的值取代一个通用的值。可以通过应用替换方法来实现这一点。

用标量值替换NAfillna()函数的等效行为。

示例1

import pandas as pd
import numpy as np df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}) print (df.replace({1000:10,2000:60})) 
Python

执行上面示例,得到以下结果 -

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

示例2

import pandas as pd
import numpy as np df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}) print (df.replace({1000:10,2000:60})) 
Python

执行上面示例代码,得到以下结果 -

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

转载于:https://www.cnblogs.com/navysummer/p/9641162.html

相关文章:

android servlet 登陆,Android Studio+Servlet+MySql实现登录注册

一、Android 项目当中设置明文传输1、设置明文传输的xml2、引入上述创建的xmlandroid:networkSecurityConfig"xml/network_security_config"二、在MyEclipse当中创建Web项目1、创建项目引入MySQL的驱动包2、创建实体类Userpackage entity;public class User {private…

tomcat在服务器上改了8080的端口之后所带来的问题

因为与IIS的端口冲突,有人会在服务器上改tomcat的端口。但是tomcat在服务器上将端口8080改了之后,可能会导致所不熟的项目在访问时只能访问前面的域名,用户是使用时显示的域名看不到后面的后缀,比如aaa.com/aa,用户不论…

修改git的远程仓库命令

1. 修改命令 git remte origin set-url URL 2.先删后加 git remote rm origin git remote add origin gitgithub.com:Liutos/foobar.git 3. 直接修改config文件

c# 网站在服务器上第一次请求都需要耗时很久,最.net面试题目.doc

经典.net面试这些是C#ASP.NET数据库面试题,全部从网上收集而来,经整理而发表,希望给大家带来帮助,有错误的地方还请各位高手指出,在下倾听指教。1. 简述private、protected、public、internal 修饰符的访问权限。答. p…

动态语言的灵活性是把双刃剑 -- 以Python语言为例

本文有些零碎,总题来说,包括两个问题: (1)可变对象(最常见的是list dict)被意外修改的问题, (2)对参数(parameter)的检查问题。 这两个…

android 绘画,Android绘图基础

绘图三要素一支画笔 Paint。一张画布 Canvas。一个 Bitmap 或者一个 View 来承载这个图形。Paint常用属性setAntiAlias() 设置画笔锯齿效果。setColor() 设置画笔颜色。setTextSize() 设置字体尺寸。setStrokeWidth() 设置空心边框的宽度。setStyle() 设置画笔的风格。Canvas常…

源码0306-手势解锁

现搭建页面 // VCView.h // 06-手势解锁#import <UIKit/UIKit.h>interface VCView : UIViewend// VCView.m // 06-手势解锁#import "VCView.h"implementation VCView - (void)drawRect:(CGRect)rect {// 绘图图像UIImage *image [UIImage imageNamed:&quo…

about ajax,About 4nf.org - Arvind Gupta | Ajaxify | The Ajax Plugin

Hi Tony,That page shows various example calls and example websites, that use this plugin.Also, 4nf.org serves as an example, that is a fairly complex WordPress site.By default “previewoff” is true, so that swaps of the content div(s) are performed on cli…

numpy.random.seed()

numpy.random.seed()&#xff1a;用于指定随机数生成时使用算法的开始值&#xff0c;如果没有指定每次生成的值都不一样 如果不指定seed的值&#xff0c;那么每次随机生成的数字都不一样&#xff1a; In [17]: import numpy as npIn [18]: i 0In [19]: while i < 5:...: …

ios .framework动态库重签名

真机上运行.framework时&#xff0c;如果报 dylddyld_fatal_error:dyld: Library not loaded: rpath/XX.framework/XXReferenced from: /var/containers/Bundle/Application/DF33E1CB-0A69-4303-A22A-686E643DE922/iDoctors.app/iDoctors Reason: no suitable image found. Did…

canvars 画花

index.html<!DOCTYPE html><html><head> <title>旋转的花</title> <meta charset "utf-8"> <!--width - 可视区域的宽度&#xff0c;值可为数字或关键词device-width --> <!--height - viewport的高度--&…

android google 下拉刷新 csdn,android SwipeRefreshLayout google官方下拉刷新控件

下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单今天就来使用下SwipeRefreshLayout 以后再需要时可以参考.首先在布局里面加入SwipeRefreshLayout 布局:Activity文件中的代码mSwipeRefresh…

服务器操作系统安全更新,服务器操作系统安全更新

服务器操作系统安全更新 内容精选换一换使用弹性云服务器或者外部镜像文件创建私有镜像时&#xff0c;必须确保操作系统中已安装UVP VMTools&#xff0c;使新发放的云服务器支持KVM虚拟化&#xff0c;同时也可以提升云服务器的网络性能。如果不安装UVP VMTools&#xff0c;云服…

流程控制if、while、for

if判断 if判断想执行第一个条件&#xff0c;if后的判断必须是True 1 什么是if判断   判断一个条件如果成立则做...不成立则做....2 为何要有if判断   让计算机能够像人一样具有判断的能力3 如何用if判断 语法1: if 条件1:code1code2code3...... 语法2:if-else if 条件:code…

抄写例题作业1

截图 1.例9.1 &#xff08;1&#xff09;代码实现 1 #include<stdio.h>2 int main()3 {4 struct stu5 {6 long int num;7 char name[20];8 char sex[3];9 char addr[20]; 10 }a{1010,"董诗原","男",&qu…

android button imagebutton 区别,Android 开发入门篇

Button 与 ImageButton本节学习Android基本控件按钮控件&#xff0c;Button和ImageButton用法基本类似&#xff0c;所以本节重点讲解Button控件。在布局中添加Button控件&#xff1a;android:id"id/btn"android:text"普通按钮"android:layout_width"w…

iOS autolayout 约束冲突添加symbol breakpoint

UIViewAlertForUnsatisfiableConstraints

Win7安装ant

下载ant&#xff0c;当前版本是1.9.4。下载地址点击打开链接。 解压到你喜欢的路径下面&#xff0c;我喜欢D:\Program Files\apache-ant-1.9.4 配置环境变量ANT_HOME。右击计算机→选择属性→高级系统设置→“高级”标签→环境变量。 新建系统变量。变量名必须是“ANT_HOME…

af eeee

e 转载于:https://www.cnblogs.com/xiaobaiv/p/9661043.html

ios bug 分析

ios中线上或者内部测试bug统计收集有两种方法&#xff1a; 1)使用第三方bug收集 1.bugHD 来源http://bughd.com/doc/ios-customize 2.bugtags 来源http://help.bugtags.com/hc/kb/article/124400/ http://help.bugtags.com/hc/kb/article/68482/ 3.KSCrash https://github.com/…

我理解的接口测试(一)

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 接口 应用&#xff08;模块&#xff09;提供对…

android jni语法,Android NDK中的JNIEXPORT和JNICALL

基本上是一个Windows问题,如果你看看oracle Java jdk附带的文件jni_md_win32.h这是宏定义&#xff1a;/** (#)jni_md.h 1.14 03/12/19** Copyright 2004 Sun Microsystems, Inc. All rights reserved.* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*/#ifnd…

Win7编译volley成jar包

首先安装git和ant&#xff0c;当然jdk也是必须的。 git clone搞到volley的源码。 git clone https://android.googlesource.com/platform/frameworks/volley 此时volley的目录里面应该是这样的&#xff0c;没有AndroidManifest.xml文件。 cd进volley目录&#xff0c;敲下一…

c语言的求素数算法,C语言求素数的算法

最后一次是出了素数的问题C语言解决题目(面试)&#xff0c;当时用了最粗暴的算法。回来细致參考资料&#xff0c;事实上答案有非常多种&#xff1a;1&#xff0c;小学生版本号&#xff1a;推断 x 是否为质数&#xff0c;就从 2 一直算到 x-1。static rt_uint32_t array1[ARRAY_…

Python全栈Day 15部分知识点

全局变量与局部变量 约定俗成的规则&#xff1a;全局变量名大写&#xff0c;局部变量名小写。 全局变量没有缩进&#xff0c;顶格写。 如果函数的内容无global关键字&#xff0c;优先读取局部变量&#xff0c;能读取全局变量&#xff0c;无法重新赋值&#xff0c;但是对于可变类…

SQL执行并返回执行前/后结果

SQLServer&#xff1a; 1、插入数据&#xff0c;并返回插入的数据&#xff1a;INSERT INTO TestTB(Province,City) output inserted.Province, inserted.City VALUES(广东,深圳)2、同理&#xff0c;删除数据也是一样的&#xff0c;只不过是使用deleted表罢了。delete from Test…

WebStorm 运行Rect Native 项目

今天教大家如何直接使用WebStorm这个IDE直接完成编码运行项目工作.这样就可以不用打开Xcode了. 1.首先点击WebStorm右上方的下拉箭头弹出的Edit Configurations.... 2.然后会进入一个配置页面.点击左上方的.在弹出的列表中选中npm.如图. 3.在右边的配置框中,先选择Command为hel…

Win7下用VS2010编译QGIS2.9.0

折腾了两天了&#xff0c;终于吧QGIS2.9.0在VS2010下面编译过了。 参考了许多的博客&#xff0c;在网络环境极为和&#xff08;e&#xff09;谐&#xff08;lie&#xff09;的情况下用Google查了好多资料。 其实原创的东西真的不多&#xff0c;但是毕竟是自己亲身实践得到的成…

软件工程第二次课后作业——Gaoooo

代码量&#xff1a;9行 码云仓库&#xff1a;https://gitee.com/Gaooo/2016035107059.git 实现时间&#xff1a;emmmmm&#xff08;9行代码&#xff0c;自己估计&#xff01;&#xff01;&#xff09; 程序对表达式类型的支持程度&#xff1a;全部支持&#xff01; 能支持两个操…

android检测本地是否安装,在本地测试模块的安装

Play 核心库可让您在本地测试应用是否能够执行以下操作&#xff0c;而无需连接到 Play 商店&#xff1a;请求并监控模块的安装。处理安装错误。本页介绍了如何将应用的拆分 APK 部署到测试设备&#xff0c;以便 Play 核心自动使用这些 APK 模拟从 Play 商店请求、下载和安装模块…