一文速学-Pandas处理缺失值操作各类方法详解

简介: 一文速学-Pandas处理缺失值操作各类方法详解

前言


匆忙之间在CSDN上连载博客已有三年之久,现在已临近毕业。回顾大学的四年尽是不甘,意难平。有时反思良久,或许是我对自己的定位还不够明确,还不知道自己想要的是如此模糊,也许接受现实是对理想主义者最大的冲击。


以上是博主突然有感而言,现在回归博客主题。


使用Pandas进行数据预处理时需要了解Pandas的基础数据结构Series和DataFrame。若是还不清楚的可以再去看看我之前的三篇博客详细介绍这两种数据结构的处理方法:


一文速学-数据分析之Pandas数据结构和基本操作代码


DataFrame行列表查询操作详解+代码实战


DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示


以上三篇很容易学会,没有比较难的实战。此篇博客基于Jupyter之上进行演示,本篇博客的愿景是希望我或者读者通过阅读这篇博客能够学会方法并能实际运用,而且能够记录到你的思想之中。当然个人不是数学专业对一些专业性的知识可能不是很了解,希望读者看完能够提出错误或者看法,博主会长期维护博客做及时更新。纯分享,希望大家喜欢。


此博客用到的数据集为:


b8d41fcdb18f40d5bc2d90e75188cc0d.png


缺失值处理


1.计数


isnull函数可以显示为空的值,使用False和True替换原数据集


df1.isnull()


0776186f6b29456797d90f08f2baf851.png


一般在加上sum()统计各个特征空值数:


df1.isnull().sum()


96edf499829247a293782a647696606d.png


计数空值的话也可以通过info()函数对比其他列相减得到空值个数:


df1.info()


5a49b416ffce42a9b53854c79b984f84.png

135968-107759=28209就是空值的个数。


2.筛选


检测完毕后可以我们可以筛选出没有空值的行数据:

 

df1.loc[df1['city_num'].notnull(),:]


297de2dfdbef48649445d66f11614c69.png


也可以使用dropna()函数对空值进行删除:


DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)


参数说明:


axis:指定的轴,默认为0也就是参照对每行进行操作,1就为列。

how:可以为any也可以为all,对整体或者部分进行操作。

thresh:一行或一列中至少出现了多少个空值才删除。

subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)

inplace:是否替换原数据集。


df1.dropna(axis=0,how='any',inplace=False)

e9f131c9f12e480eaea670922c05839f.png


3.填充


关于填充上偏文章有讲述过fillna()函数可以将空值统一替换为想要的数值(也可以设定为均值填充dataFrame.mean(),inplace = True、向上填充method=‘ffill’、向下填充method=‘bfill’、对应值填充df.replace({np.nan:‘aa’}))


DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

参数说明:


value:将空值替换成任意设定的值

method:method参数的取值 : {‘pad’, ‘ffill’,‘backfill’, ‘bfill’, None}, default None

ffill:用缺失值前面的一个值代替缺失值,如果axis =1,那么就是横向的前面的值替换后面的缺失值,如果axis=0,那么则是上面的值替换下面的缺失值。backfill/bfill,缺失值后面的一个值代替前面的缺失值。注意这个参数不能与value同时出现。

向上填充method=‘ffill’、向下填充method=‘bfill’,

axis:指定改变的轴,默认为0也就是对每行操作。

inplace:是否替换原数据集。

limit参数:限制填充个数。

为方便展示这里另外创建数据集:

a0f728d64a4d45a88d2a3623ab449074.png


例如我想把年龄为空值的数据替换为10:


df2.loc[:,'old'].fillna(value=10,inplace=True)

5c7c930221c14dd6b5b5818562dd3bd4.png

填充为上一个数据:


df2.loc[:,'old'].fillna(method='ffill',inplace=True)

2598aec868c44e47bd3f82273b9d2ab5.png

向下填充数据:

df2.loc[:,'old'].fillna(method='bfill',inplace=True)


817e3b12fdf9483499bdd6c3c243455f.png

填充为均值:


df2.loc[:,'old'].fillna(value=df2.loc[:,'old'].mean(),inplace=True)

845cd42a11c74d97a83ac18fb1288502.png

填充为众数:


df2.loc[:,'old'].fillna(value=df2.loc[:,'old'].median(),inplace=True)


4abb95b6d9a8443b90e6d608fc5f34a3.png

填充为最大值:


df2.loc[:,'old'].fillna(value=df2.loc[:,'old'].max(),inplace=True)


fa0f67dcfdf24e9e9ae6e5f451ffe303.png


填充为最小值:


df2.loc[:,'old'].fillna(value=df2.loc[:,'old'].min(),inplace=True)


81f7779132344d619bbeffcd8471e222.png

目录
相关文章
|
6月前
|
Python
如何使用Python的Pandas库进行数据透视图(melt/cast)操作?
Pandas的`melt()`和`pivot()`函数用于数据透视。基本步骤:导入pandas,创建DataFrame,然后使用这两个函数变换数据。示例代码:导入pandas,定义一个包含'Name'和'Age'列的DataFrame,使用`melt()`转为长格式,再用`pivot()`恢复为宽格式。
146 1
|
2月前
|
SQL 索引 Python
Pandas中DataFrame合并的几种方法
Pandas中DataFrame合并的几种方法
183 0
|
17天前
|
Python
通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法
在金融分析领域,"死叉"指的是短期移动平均线(如MA5)下穿长期移动平均线(如MA10),而"金叉"则相反。本文介绍了一种利用Python编程语言,通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法。该方法首先计算两种移动平均线,接着确定它们的交叉点,最后检查并输出最近一次死叉及其后是否形成了金叉。此技术广泛应用于股市趋势分析。
32 2
|
1月前
|
存储 数据采集 数据处理
Pandas中批量转换object至float的高效方法
在数据分析中,常需将Pandas DataFrame中的object类型列转换为float类型以进行数值计算。本文介绍如何使用`pd.to_numeric`函数高效转换,并处理非数字值,包括用0或平均值填充NaN值的方法。
44 1
|
2月前
|
数据处理 Python
Pandas中的drop_duplicates()方法详解
Pandas中的drop_duplicates()方法详解
166 2
|
2月前
|
数据处理 Python
Pandas快速统计重复值的2种方法
Pandas快速统计重复值的2种方法
103 1
|
2月前
|
数据挖掘 Python
掌握Pandas中的相关性分析:corr()方法详解
掌握Pandas中的相关性分析:corr()方法详解
161 0
|
2月前
|
数据处理 索引 Python
Pandas中resample方法:轻松处理时间序列数据
Pandas中resample方法:轻松处理时间序列数据
65 0
|
2月前
|
SQL 数据采集 索引
聚焦Pandas数据合并:掌握merge方法
聚焦Pandas数据合并:掌握merge方法
33 0