DataWhale组队-Pandas(下)缺失数据(打卡)

1.缺失值概要

数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果的不准确,以下从缺失值产生的原因及影响扥方面展开分析。

(1)缺失值产生的原因

1)有些信息暂时无法获取,或者获取信息的代价太大;

2)有些信息是被遗漏的。可能是因为输入时认为不重要、忘记填写或对数据理解错误等一些人为因素而遗漏,也可能是由于数据采集设置的故障、存储介质的故障、传输媒体的故障灯非人为原因而丢失;

3)属性值不存在。在某些情况下,缺失值并不意味着数据有错误。对一些对象来说某些属性是不存在的,如一个未婚者的配偶姓名、一个儿童的固定收入等。

(2)缺失值的影响

1)数据挖掘建模将丢失大量的有用信息;

2)数据挖掘模型所表现出的不确定性更加显著,模型中蕴涵的规律更难把握。

3)包含空值的数据会使建模过程陷入混乱,导致不可靠的输出。

(3)缺失值的分析

使用简单的统计分析,可以得到含有缺失值的属性的个数,以及每个属性的未缺失数、缺失数与缺失率等。

从总体上来说,缺失值的处理分为删除存在缺失值的记录、对可能值进行插补和不处理3种情况。

2.缺失值处理

import pandas as pd
import numpy as np
df = pd.read_csv('data/table_missing.csv')
#默认输出DataFrame的前5行
df.head()  

(1)了解缺失数据

函数isna和notna方法

df['Physics'].isna().head()

df['Physics'].notna().head()

统计每列(每行)的缺失情况

#统计每列的缺失
df.isna().sum()#或者df.isnull().sum()
#统计每行的缺失
df.isna(axis=0).sum()#或者df.isnull(axis=0).sum()

挑出该列缺失值的行

df[df['Physics'].isna()]

挑选出所有非缺失值的列

这里介绍了all和any的用法,all是全部值,any是至少有一个值

#all是全部非缺失值
df[df.notna().all(1)]
#any至少有一个不是缺失值
df[df.notna().any(1)]

(2)三种缺失符号

(a)np.nan

它不等与任何东西,甚至不等于自己¶

在用equals函数比较时,自动略过两侧全是np.nan的单元格

        在numpy中的类型为浮点,由此导致数据集读入时,即使原来是整数的列,只要有缺失值就会变为浮点型

        对于布尔类型的列表,如果是np.nan填充,那么它的值会自动变为True而不是False,但当修改一个布尔列表时,会改变列表类型,而不是赋值为True

         在所有的表格读取后,无论列是存放什么类型的数据,默认的缺失值全为np.nan类型,因此整型列转为浮点;而字符由于无法转化为浮点,因此只能归并为object类型('O'),原来是浮点型的则类型不变。

         (b)None

           None比前者稍微好些,至少它会等于自身

           它的布尔值为False

           修改布尔列表不会改变数据类型

           在传入数值类型后,会自动变为np.nan

          只有当传入object类型是保持不动,几乎可以认为,除非人工命名None,它基本不会自动出现在Pandas中

           在使用equals函数时不会被略过,因此下面的情况下返回False¶

        (c)NaT

           NaT是针对时间序列的缺失值,是Pandas的内置类型,可以完全看做时序版本的np.nan,与自己不等,且使用equals是也会被跳过。

        (3)Nullable类型与NA符号

        (a)Nullable整形

          对于该种类型而言,它与原来标记int上的符号区别在于首字母大写:‘Int’,好处在于缺失值的类型都被替换成统一的NA符号,且不改变数据类型。

(b)Nullable布尔 

与Nullable整型一致,且数据类型不会变成浮点型

(c)string类型

为了区分开原本含糊不清的object类型,它本质上也属于Nullable类型,因为不会含有缺失而改变类型;

与object类型的一点重要区别就在于,在调用字符方法后,string类型返回的是Nullable类型,object则会根据缺失类型和数据类型而改变。

(4)NA的特性

(a)逻辑运算

只需看该逻辑运算的结果是否依赖pd.NA的取值,如果依赖,则结果还是NA,如果不依赖,则直接计算结果,取值不明直接报错

(b)算术运算和比较运算

当出现pd.NA**0和1**pd.NA时结果为1,其他情况为NA

(5)convert_dtypes方法

在读取数据时,就把数据列转为Nullable,是pandas1.0的新函数。

pd.read_csv('data/table_missing.csv').convert_dtypes().dtypes

3.缺失数据的运算与分组

(a)加号和乘号规则

使用加法时,缺失值为0;

使用乘法时,缺失值为1;

使用累计函数时,缺失值自动略过

(b)groupby方法中的缺失值

自动忽略为缺失值的组

df_g = pd.DataFrame({'one':['A','B','C','D',np.nan],'two':np.random.randn(5)})
print(df_g)
df_g.groupby('one').groups

4.填充与剔除

(a)fillna方法(值填充与前后向填充,methods=ffill or bfill)

#值填充
df['Physics'].fillna('missing').head()
#前向填充
df['Physics'].fillna(method='ffill').head()
#后向填充
df['Physics'].fillna(method='backfill').head()

指定列填充

df_f = pd.DataFrame({'A':[1,3,np.nan],'B':[2,4,np.nan],'C':[3,5,np.nan]})
#填充全部列
df_f.fillna(df_f.mean())
#填充A,B两列
df_f.fillna(df_f.mean()[['A','B']])

(b)dropna方法

axis参数是行或列的参数,如果axis=0,则对应是每一行,如果axis=1,则对应没一列

how参数是可以选择all或者是any,表示全为缺失去除或存在缺失去除

subset参数是在某一列范围中搜索缺失值

5.插值(interpolation)

常见的数据插补方法有:

(1)线性插值

(a)与索引无关的线性插值

默认状态下,interpolate会对缺失的值进行线性插值

s = pd.Series([1,10,15,-5,-2,np.nan,np.nan,28])
s.interpolate()

(b)与索引有关的线性插值

method中的index和time选项可以是插值线性地依赖索引,即插值为索引的线性函数

s.interpolate(method='index')

如果索引是时间,那么可以按照时间长短插值。

s_t = pd.Series([0,np.nan,10],index=[pd.Timestamp('2012-05-01'),pd.Timestamp('2012-05-07'),pd.Timestamp('2012-06-03')])
#未按照time插值(图1)
s_t.interpolate()
#按照time插值(图2)
s_t.interpolate(method='time')

 

(2)高级插值方法

与线性插值相比较,例如样条插值、多项式插值、阿基玛插值等,可进一步学习。

ser = pd.Series(np.arange(1, 10.1, .25) ** 2 + np.random.randn(37))
missing = np.array([4, 13, 14, 15, 16, 17, 18, 20, 29])
ser[missing] = np.nan
methods = ['linear', 'quadratic', 'cubic']
df = pd.DataFrame({m: ser.interpolate(method=m) for m in methods})
df.plot()

(3)interpolate的限制参数

(a)limit最多插入多少个,s.interpolate(limit=2)

(b)limit_direction表示插值方向,可选forword,backward,both,默认前向,s.interpolate(limit_direction='backward')

(c)limit_area表示插值区域,可选inside,outside,默认None,s.interpolate(limit_area='inside')

练习题:

(1)如何删除缺失值在25%以上的列

s.drop(s.columns[s.isna().sum()/s.shape[0]>0.25],axis=1)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南橘北枳

春秋战国时期,智者晏子曾经说过一句话:“桔生淮南为橘,生于淮北为枳”,说的是淮南香甜的橘子移植到淮北就变成苦涩难吃的枳。因为事物的条件和环境等变了,所以才会这样。这句话现在大多是针对人品说的,大概…

用C语言字符画圆

用C语言画圆,这是一是算法的问题,我们知道,程序是由数据结构加算法组成的,研究这类东西,其实也是研究算法的问题,是比较有意思的。圆心为0的时候,圆的公式公式:那我们要如何写代码呢…

Linux C目标文件

LinuxC目标文件 宗旨:技术的学习是有限的,分享的精神是无限的。 一、目标文件格式(ELF格式) 编译器编译源代码后生成的文件叫做目标文件。目标文件是已经编译后的可执行文件,只是还没有经过链接的过程。 PC平台流行…

Win2003下Exchange2003部署图解之七

Exchange 2003 基本配置在邮件服务器SERVERVM下打开“第一个存储组”,(这里我们只看到一个缺省的存储组,在Exchange2003标准版中我们只能建立一个存储组,而企业版中我们可以建立4个存储组)选择“邮箱存储”&#xff0c…

嵌入式Linux操作UART实例

1引言串口是我们实际工作中经常使用的一个接口,比如我们在Linux下使用的debug串口,它用来登录Linux系统,输出log。另外我们也会使用串口和外部的一些模块通信,比如GPS模块、RS485等。这里对Linux下串口使用做个总结,希…

Datawhale组队-Pandas(下)文本数据(打卡)

一、string类型的性质 1.string和object的区别 string类型和object不同之处有三: 字符存取方法(string accessor methods,如str.count)会返回相应数据的Nullable类型,而object会随缺失值的存在而改变返回类型某些Se…

sql语句遇到的问题

分别统计所有男同学的平均分,所有女同学的平均分及总平均分 //SELECT AVG(score),name,(SELECT AVG(score) FROM student) as 总平均分 from student GROUP BY sex; 按照分数从小到大的顺序打印分数大于总平均分的学员信息(id-name-sex-score),并将分数大于总平均分…

新唐单片机代码评审总结

昨晚上,我们一个同事组织了一个小会议,大家一起讨论了一个项目的单片机代码,这个单片机用的是新唐单片机,期间大家也讨论了一些问题,总结一下,希望对写单片机的同学们有帮助。我这个同事写的代码非常优秀&a…

Datawhale组队-Pandas(下)分类数据(打卡)

Categoricals是pandas的一种数据类型,对应于统计学中的Categorical variables(分类变量),分类变量是有限且固定的可能值,例如:gender(性别)、血型、国籍等,与统计学的Cat…

【分享】一个集成tracert和ping的网络监测工具

最近接到一个需求,需求背景是这样的:目前Windows平台下本身都有tracert和ping的实现,而且可以直接在cmd下使用。 需求中有两个要求: 1. Windows平台中的tracert执行速度太慢,一次tracert可能要花十几分钟。所以&#x…

秀操作 | 函数宏的三种封装方式

作者:☆星轨★ 链接:https://blog.csdn.net/qq_35692077/article/details/1029949591. 函数宏介绍函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压…

Datawhale组队-Pandas(下)时序数据(打卡)

Pandas可以处理任何领域的时序数据(time series),使用Numpy的datetime64 和timedelta64 类型,Pandas整合了来自其他Python库的大量功能,如Scikits.TimeSeries,并为处理时间序列数据创建了大量新功能。 一、…

解析一个C语言俄罗斯方块游戏,包你看了就会

最近在看俄罗斯方块的游戏,看到一个大神写的俄罗斯方块代码,非常非常优秀,拿出来解析给大家看看,也希望大家自己尝试运行试试,从中能得到一些启发。#先了解下俄罗斯方块的几个形状一共分成 7 形状,有的形状…

认识星座、八大行星的观察

1. 北斗七星 北斗七星属于大熊座,春夏可见;2. 八大行星 太阳系的八大行星基本位于同一轨道面,如以地球轨道面为基准,相互间轨道倾角的差距甚至不到5度(不包括水星)。太阳系各大行星公转平面与地球黄道平面的…

Datawha组队——Pandas(下)综合练习(打卡)

import pandas as pd import numpy as np import missingno as msno import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei] #用来正常显示中文标签 plt.rcParams[axes.unicode_minus]False #用来正常显示负号#读取数据 df pd.read_csv(端午粽子数据.csv) d…

测试内存对齐对运行速度的影响

我们知道内存对齐是为了方便CPU工作,但是对齐和不对齐差异有多大呢?我自己也没有实际测试过,今天就运行个代码测试看看。1、1字节对齐的时候#include "stdio.h"#pragma pack(1) struct test { char x1; short x2; float x3; …

Datawhale-零基础入门NLP-新闻文本分类Task01

参考: https://www.jianshu.com/p/56061b8f463a 统计自然语言处理 宗成庆(第二版) 文本自动分类简称文本分类(text categorization),是模式识别与自然语言处理密切结合的研究课题.传统的文本分类是基于文本内容的,研究如何将文本自动划分为…

华为海选开发者状元?还送14件豪礼?

华为云全年最大 最大 最大开发者庆典活动来啦!这次庆典没别的,就是:好玩!刺激!让你拿奖拿到怀疑人生!贺岁就要有贺岁的样子~赶紧来看看华为云为开发者们准备了怎样的新年惊喜好玩的在这里!上学的…

Datawhale-零基础入门NLP-新闻文本分类Task02

Task01里边对赛题进行了分析,接下来进行数据读取与数据分析,通过使用Pandas库完成数据读取和分析操作。 1 数据读取 由赛题数据格式可知,可通过read_csv读取train_set.csv数据: import pandas as pd import numpy as np import matplotlib…

一步步分析-C语言如何面向对象编程

这是道哥的第009篇原创一、前言在嵌入式开发中,C/C语言是使用最普及的,在C11版本之前,它们的语法是比较相似的,只不过C提供了面向对象的编程方式。虽然C语言是从C语言发展而来的,但是今天的C已经不是当年的C语言的扩展…