1 数据读取
由于我上没学,所以上下我是对照来学的,这里笔记注重于语句理解
import pandas as pd
import numpy as np
df = pd.read_csv('E:/data/table_missing.csv')
df.head(15)
read_csv:此句的意思是读取csv格式的表格,
pandas中的调用命令为
a = pd.read_csv('E:/文件名/文件名')
接下来就是pandas中的head命令
head:该命令代表的是显示读取文件中的内容,并且显示文件,其默认为显示数据的,将数据表格中的第一行作为列表名,然后输出表格中的前5行数据
其中head中的()可以指定括号的形式
2 了解缺失信息
isna和notna方法
Isna主要判断的是 某个数据值是不nan ,一般返回的是bool值
这里我注意到了在csv表格中,表示的缺失数据
那么调用这个命令,最后显示的结果如下,文中检查的是Physics命令中的选项,
当然也可以调用全部信息
其语法为
df.isna().head()
这样可以不指定表头观察所有数据的缺省情况,其结果图如下
notna:这个方法与isna类似,只不过返回的值主要 是nan 返回的是false,而对于不是nan的则返回是true 这个与isna则正好相反
其结果如下
同样去掉表头则会显示bool值表,结果如下
对于数据缺失值数量的显示
这对于缺失值使用了一个sum的命令来查看,其语法的格式
df.isna().sum() #这条命令来记录缺省值
结果
这杨就清楚的表示了每一类型的缺省值的情况,
从这个样例中我了解到,还是用isna比较符合常规逻辑,毕竟在真个DATAFRAME中我们主要关心的还是数据中缺省值的数目多少,这里主要对true进行统计加1
也可以使用第一章的函数进行处理ifno处理
这个函数主要可以看出信息不缺省的行,有点类似于notna但是,却不如isna和notna直观
如果想要看看缺失信息是哪行,则可以使用下列语法格式
df[df['Physics'].isna()]
结果如下
这样可以清楚直观的查看缺省信息的行是什么样子的
挑选出所有非缺失值的列
使用all就是全部非缺失值,any就是至少有一个不是缺失值
这条语句刚看有点懵,出于好奇,我把notna换成了isna
变成了这样,
然后通过比较我知道,我智障了,这个还是对true进行统计加一,通过notna,**来寻找各个参数都不是空的数据。**这样就挑选出来了合适的数据
2 三种缺失符号
np.nan
np.nan 不等于任何东西包括自己
在用equal函数比较时,自动略过两侧全是np.nan的单元格,因此结果不会影响
也就是说npn不影响结果
在numpy中的类型为浮点型,由此导致数据集读入时,即使原来是整数的列,只要缺失值就会变为浮点型
此外,对于布尔类型的列表,如果是np.nan填充,那么它的值会变为True而不是False
但当修改一个布尔列表时,会改变表类型,而不是赋值为True
在所有的表格读取后**,无论列放什么类型的数据,默认的缺失值为np.nan类型**
因此整型列转为浮点;而字符由于无法转化为浮点型,因此只能并归为pbject类型(‘O’),原来是浮点型的则类型不变
总结
1 np.nan不等于任何的数,包括他自己
2 一般是默任类型
3 当列表值修改成np.nan 则真个列表得值会变成float类型
4 bool类型其为true 但使用np.nan修改不二列表则会修改那个个值
2 None
None是等于其自身的
它的布尔值为False
修改布尔列表不会改变数据类型
这个正好和np.nan相反
但在传入数值类型后,会变成np.nan
只有当传入object类型是保持不动,几乎可以认为,除非人工命名None,它基本不会自动出现在Pandas中
在使用equal函数时不会被略过,因此下面得情况返回False
Nat
Nat是针对时间序列得缺失值,是Pandas的内置类型,可以完全看做时序版本的np.nan与自己不等,且使用equals是会被跳过的
总结
1 None只要不是人工操作 就不会出现
2 bool值为False,当目标为Object不改变类型 否则和整型一起则变为float
3 和自己相等 不改变bool表类型
4 Nat为时间序列的np.nan
Nullable类型和NA符号
原文的意思好像是为了统一解决原来混乱的局面,统一缺失值的处理方法
1 Nullable整型类型
区别于数字整型,改变在于代表int类型首字母是要大写的
这样做的好处在于,可以将其中的元素变成Na符号,而不改变数据类型,
比如我们进行下面的实验,首先我们将原来的数据中元素进行替换,我们发现数据类型发生了改变
当我们使用Nullable所定义的新型的Int型时候,发现除了里面的数值改变,前期数据类型仍然保持不变
而且我们发现替换的符号不是上述的几种,而是变成了Na
Nullable布尔
对于该种类型而言,作用与上面的类似,记号为boolean
这里重新定义了新的类型,可以很清楚的发现,np.nan和None这两种类型会对整个数据类型产生一些应影响
呢么 使用了新版的数据类型boolean之后,变化结果不会改变数据的类型,其关键语句如下所示
从这个里面可以很清楚的看出,采用了新的bollean只会被替换成Na类型,而且并不会像,np.nan那样改变数据的类型
string类型
目的之一是为了区分开原点含糊不清的object类型,这里简要地提及string,
本质上仍然为Nullable类型,本质上和上面的一样不会改变数据的类型
与object类型不同在于,在调用字符方法后,string返回的是Nullable,而object类型则会依据缺失类型和数据类型而发生变化
Na的特性
(a)逻辑运算
只要看该逻辑运算的结果是否依赖pd.NA的取值,如果依赖,则结果还是为NA,如果不依赖,则直接计算结果
理解
这里的理解主要针对于依赖NA,这句话,这句话的意思,看似最后的结果是不和Na,有关系,当真和一和数相或的时候,显然只要一个数为真,结果一定为真,当真和一个数相与时,不光要看一个数,还要看另外一个数,如果结果和两个数都有关系,我们管他叫依赖,当这个结果和Na有关系时候,显然,结果依赖于Na,则最后的结果也一定是NA
取值不明直接报错
算术运算和比较运算
这里只需要记住除了下面两类情况,其他结果都是NA即可
理解
** 这个叫做幂运算 也就是说除了幂运算其他都是NA
5 convert_dtype方法
这个函数功能往往就是在读取数据时,就把数据列转为Nullable类型,是1.0的新函数
可以很明显的看出数据类型发生了变化,将其转化为Nullable中的类型
二 数据类型的运算与分组
1 加号与乘号规则
使用加法时缺失值为0
使用乘法时,缺失值为1
使用累计函数时,缺失值自动略过
理解这里我的理解就是这个pd.NA或者说Nan是不参与运算的 不会影响运算结果
2 grouby方法中的缺失值
自动忽略缺失值的组
三 填充剔除
1 fillna方法
(a)值填充与前后向填充(向前填充fill方法 和 bill方法)
2 填充中的对齐性
填充中的对齐特性
返回的结果中没有c,根据对齐特点不会被填充
dropna方法
1 axis参数
理解:axis=0指的是逐行,axis=1指的是逐列
使用0值表示沿着每一列或行标签\索引值向下执行方法
使用1值表示沿着每一行或者列标签模向执行对应的方法
2 how参数(可以选all或者any,表示全为缺失去除和存在缺失去除)
(这里的dropna方法是一个创建缺失值的数据库之前的axis则是删除或者除去相应的值)
3 subset参数(即在某一组列范围中搜索缺失值)
总结:
这个方法其实主要是针对缺失表的创建
以及缺失数值的删除
这个函数具有很重要的意义,因为在机器学习中需要对数据进行清洗
四 插值
1. 线性插值
(a)索引无关的线性插值
默认状态下,interpolate会对缺失的值进行线性插值
可以看出4 5是缺值得,这个时候需要进行插值处理
转载:插值定义
插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。与拟合不同的是,要求曲线通过所有的已知数据。SciPy的interpolate模块提供了许多对数据进行插值运算的函数,范围涵盖简单的一维插值到复杂多维插值求解。当样本数据变化归因于一个独立的变量时,就使用一维插值;反之样本数据归因于多个独立变量时,使用多维插值。
计算插值有两种基本的方法,1、对一个完整的数据集去拟合一个函数;2、对数据集的不同部分拟合出不同的函数,而函数之间的曲线平滑对接。第二种方法又叫做仿样内插法,当数据拟合函数形式非常复杂时,这是一种非常强大的工具。
此时的差值和索引没有关系
2 与索引有关的插值
methon中的index和time选项可以使插值线性地依赖索引,即插值为索引的线性函数
可以看出此时几乎为线性的
如果索引是时间,那么可以按照时间长短插值,对于时间序列将在第9章详细介绍
可以看出下列按照时间进行插值的图像
总结:
这种插值主要依赖于index和time这两种方法
高级插值
此处的高级指的是与线性插值相比较,例如样条插值,多项式插值,阿基玛插值(需要安装Scipy)
3 interpolate中的限制参数
1 limit表示最多插入多少个
limit_direction表示插值方向,可选forword,backward,both,默认前向
limit_area表示插值区域,可选inside,outside,默认None
五 问题与练习
本问题学习自网址:https://blog.csdn.net/weixin_45569785/article/details/106877323
1 如何删除缺失值占比超过25%的列?
我自己学艺不精 就阐述一下上面那个网址中的两个思路
方法1 就是使用isna,对一个列表中的缺省值进行计数,每次计数加1 ,然后计算比值,这个比值就是缺省值占比,当超过0.25时,使用drop进行删除
方法2 其实可以仿照上述思路 将isna换成notna比例改成0.75
方法3 这个方法是自己定义一个函数,这个函数的方法思路就是队DataFrame进行遍历,每次检查一列 如果这列数据缺失值超过25%就删掉,最后通过这个函数保留下缺失值为25%的函数
2 什么是Nullable类型请谈谈为什么引这个设计
其实我自己对这个问题的理解就是,在没有引入Nullable这个类型数据之前,默认的缺省值有三种None np.nan 以及pd.NaT 这三种方式定义很混乱,有的时候会改变数据类型,所以为了解决上述三种定义类型的问题 引入了这个变量,我对这个变量的直观感受就是,人家就是一个缺省符号,不改变其他数据的类型,也不影响运算,有的时候在数据的清洗上可能更加的方便。
具体不同, 详见我发的那个网址 整理的很NB
3 对于一份缺失值的数据,可以采取哪些策略或方法深化对他的了解
这个思路也是借鉴上述网络的,
首先要分析数据类型
1 如果数据量很大 缺失数据和我要分析的问题 没什么太大的关系 那么这个数据可以删去
2 如果缺失数据是很关键的数据,那么这个数据如果使用的话 肯定会对数据分析造成一定的影响 所以为了是数据分析更为准确 这个数据必须山区
3 如果缺失数据量不大则可以考虑补全这个数据,但是不全数据要按照数据发展的背景去进行考虑和研究
方法 :
1. 先使用 convert_dtypes 统一数据类型
2. 先检查看哪列有缺失值: df.info()
3. 检查每列有多少缺失值: df.isna().sum()
4. 检查某列缺失值所在行情况: df[df[‘某列’].isna()]
建议自己查查 我也一脸懵逼 只是综合一下别人的说话
缺失值处理详见网址:https://www.zhihu.com/question/34725788