pandas缺失数据处理方法,pandas用于检测数据缺失的函数

  pandas缺失数据处理方法,pandas用于检测数据缺失的函数

  本文主要介绍了pandas中处理缺失数据的一些函数,并详细说明了每个函数的用法。有需要的可以参考一下。

  00-1010I、缺失值类型1、np.nan2、None3、NA标量2、缺失值判断1、缺失值判断2、缺失值统计1、列缺失2、行缺失3、缺失率4、缺失值筛选5、缺失值填充6、缺失值删除1、全部直接删除2、行缺失删除3

  

目录

 

  在熊猫中,缺失的数据显示为NaN。缺失值有三种表达方式,np.nan,none,pd.NA。

  

一、缺失值类型

 

  缺失值有一个特点(坑),它不等于任何值,甚至本身也不等于。将nan与任何其他值进行比较将返回nan。

  名词,名词

  错误的

  因为这个特性,数据集读入后,不管列是什么类型的数据,缺省的缺失值都是np.nan。

  因为nan在Numpy中的类型是浮点型,所以整数列会转换成浮点型;字符型不能转换成浮点型,只能合并成对象型( O ),而原来的浮点型不变。

  类型(名词)

  漂浮物

  警察。级数([1,2,3])。类型

  数据类型( int64 )

  警察。级数([1,np.nan,3])。类型

  数据类型( float64 )

  做数据处理的新手,遇到对象类型会不知所措。我不知道这是什么。明明是字符型,导入后就变了。其实是价值观缺失造成的。

  此外,本文还引入了时间序列的缺失值,该缺失值单独存在,用NaT来表示。它是熊猫的内置类型,可以看作是时间序列的np.nan,它不等于它本身。

  s_time=pd。系列(【pd。时间戳( 20220101)]*3)

  s_time

  02022-01-01

  12022-01-01

  22022-01-01

  数据类型:日期时间64[ns]

  -

  s_time[2]=pd。精灵

  s_time

  02022-01-01

  12022-01-01

  2NaT

  数据类型:日期时间64[ns]

  

1、np.nan

 

  另一个是None,比nan好一点,因为至少和自己持平。

  无==无

  真实的

  e>

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

  

type(pd.Series([1,None])[1])

 

  只有当传入object类型时是不变的,因此可以认为如果不是人工命名为None的话,它基本不会自动出现在pandas中,所以None大家基本也看不到。

  

type(pd.Series([1,None],dtype=O)[1])

 

  

 

  

3、NA标量

 

  pandas1.0以后的版本中引入了一个专门表示缺失值的标量pd.NA,它代表空整数、空布尔值、空字符,这个功能目前处于实验阶段。

  开发者也注意到了这点,对于不同数据类型采取不同的缺失值表示会很乱。pd.NA就是为了统一而存在的。pd.NA的目标是提供一个缺失值指示器,可以在各种数据类型中一致使用(而不是np.nan、None或者NaT分情况使用)。

  

s_new = pd.Series([1, 2], dtype="Int64")

 

  同理,对于布尔型、字符型一样不会改变原有数据类型,这样就解决了原来动不动就变成object类型的麻烦了。

  下面是pd.NA的一些常用算术运算和比较运算的示例:

  

##### 算术运算

 

  

 

  

二、缺失值判断

 

  了解了缺失值的几种形式后,我们要知道如何判断缺失值。对于一个dataframe而言,判断缺失的主要方法就是isnull()或者isna(),这两个方法会直接返回TrueFalse的布尔值。可以是对整个dataframe或者某个列。

  

df = pd.DataFrame({

 

  

 

  

1、对整个dataframe判断缺失

 

  

df.isnull()

 

  

 

  

2、对某个列判断缺失

 

  

df[C].isnull()

 

  如果想取非缺失可以用notna(),使用方法是一样的,结果相反。

  

 

  

三、缺失值统计

 

  

 

  

1、列缺失

 

  一般我们会对一个dataframe的列进行缺失统计,查看每个列有多少缺失,如果缺失率过高再进行删除或者插值等操作。那么直接在上面的isnull()返回的结果上直接应用.sum()即可,axis默认等于0,0是列,1是行。

  

## 列缺失统计

 

  

 

  

2、行缺失

 

  但是很多情况下,我们也需要对行进行缺失值判断。比如一行数据可能一个值都没有,如果这个样本进入模型,会造成很大的干扰。因此,行列两个缺失率通常都要查看并统计。

  操作很简单,只需要在sum()中设置axis=1即可。

  

## 行缺失统计

 

  

 

  

3、缺失率

 

  有时我不仅想要知道缺失的数量,我更想知道缺失的比例,即缺失率。正常可能会想到用上面求得数值再比上总行数。但其实这里有个小技巧可以一步就实现。

  

## 缺失率

 

  

 

  

四、缺失值筛选

 

  筛选需要loc配合完成,对于行和列的缺失筛选如下:

  

# 筛选有缺失值的行

 

  如果要查询没有缺失值的行和列,可以对表达式用取反~操作:

  

df.loc[~(df.isnull().any(1))]

 

  上面使用了any判断只要有缺失就进行筛选,也可以用all判断是否全部缺失,同样可以对行里进行判断,如果整列或者整行都是缺失值,那么这个变量或者样本就失去了分析的意义,可以考虑删除。

  

 

  

五、缺失值填充

 

  一般我们对缺失值有两种处理方法,一种是直接删除,另外一种是保留并填充。下面先介绍填充的方法fillna

  

# 将dataframe所有缺失值填充为0

 

  方法很简单,但使用时需要注意一些参数。

  

  • inplace:可以设置fillna(0, inplace=True)来让填充生效,原dataFrame被填充。

     

      

  • methond:可以设置methond方法来实现向前或者向后填充,pad/ffill为向前填充,bfill/backfill为向后填充,比如df.fillna(methond='ffill'),也可以简写为df.ffill()

     

      

 

  

df.ffill()

 

  原缺失值都会按照前一个值来填充(B列1行,D列1行)。

  除了用前后值来填充,也可以用整个列的均值来填充,比如对D列的其它非缺失值的平均值8来填充缺失值。

  

df.D.fillna(df.D.mean())

 

  

 

  

六、缺失值删除

 

  删除缺失值也非情况,比如是全删除还是删除比较高缺失率,这个要看自己的容忍程度,真实的数据必然会存在缺失的,这个无法避免。而且缺失在某些情况下也代表了一定的含义,要视情况而定。

  

 

  

1、全部直接删除

 

  

# 全部直接删除

 

  

 

  

2、行缺失删除

 

  

# 行缺失删除

 

  

 

  

3、列缺失删除

 

  

# 列缺失删除

 

  

 

  

4、按缺失率删除

 

  这个可以考虑用筛选的方法来实现,比如要删除列缺失大于0.1的(即筛选小于0.1的)。

  

df.loc[:,df.isnull().mean(axis=0) < 0.1]

 

  

 

  

七、缺失值参与计算

 

  如果不对缺失值处理,那么缺失值会按照什么逻辑进行计算呢?

  下面我们一起看一下各种运算下缺失值的参与逻辑。

  

 

  

1、加法

 

  

df

 

  可以看到,加法是会忽略缺失值的。

  

 

  

2、累加

 

  

# 对D列进行累加

 

  cumsum累加会忽略NA,但值会保留在列中,可以使用skipna=False跳过有缺失值的计算并返回缺失值。

  

 

  

3、计数

 

  

# 对列计数

 

  缺失值不进入计数范围里。

  

 

  

4、聚合分组

 

  

df.groupby(B).sum()

 

  聚合时会默认忽略缺失值,如果要缺失值计入到分组里,可以设置dropna=False。这个用法和其它比如value_counts是一样的,有的时候需要看缺失值的数量。

  

 

  

五、源码

 

  所有数据和代码可在我的GitHub获取:

  https://github.com/xiaoyusmd/PythonDataScience

  到此这篇关于详解pandas中缺失数据处理的函数的文章就介绍到这了,更多相关pandas缺失数据处理内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: