社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 中处理缺失值的 2 种方法

AI科技大本营 • 2 年前 • 202 次点击  

作者 | 朱小五

来源 | 快学Python

查找到了缺失值,下一步便是对这些缺失值进行处理,今天同样会分享多个方法!

删除-dropna

第一种处理缺失值的方法就是删除dropna()方法的参数如下所示。
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数说明:

  • axis:选择删除行还是列,axis=0(默认)表示操作行,axis=1表示操作列。

  • how:与参数axis配合使用,可选的值为any(默认)或者all。

  • thresh:axis中至少有N个非缺失值,否则删除。

  • subset:参数类型为列表,表示删除时只考虑的索引或列名。

  • inplace:是否在原数据上操作。

在交互式环境中输入如下命令:

df.dropna(axis=0)
输出:
how参数中,any表示一行/列有任意元素为空时即丢弃,all表示一行/列所有值都为空时才丢弃。在上一行代码中,未设置how参数,则默认为any。
df.dropna(axis=0,how='all')
输出:
thresh参数中,比如thresh=3,如果该行中非缺失值的数量小于3,将删除该行。
df.dropna(axis=0, how="any", thresh=3)
输出:
只考虑"C列", "D列",在交互式环境中输入如下命令:
df.dropna(axis=0, how="any", subset=["C列""D列"])
输出:

填充-fillna

除了使用dropna()方法直接粗暴地删除缺失值,还可以使用fillna()填充缺失值。其参数如下所示。
df.fillna(value=None, method=None, axis=None, inplace=False, limit=None)
参数说明:
  • value:表示填充的值,可以是一个指定值,也可以是字典。
  • method: 填充的方式,默认为None。
  • axis:与method参数搭配使用,axis=0表示按行,axis=1表示按列。
  • inplace:是否在原数据上操作。
  • limit:表示填充执行的次数。如果是按行填充,则填充一行表示执行一次,按列同理。
在交互式环境中输入如下命令:
df.fillna(value=0)
输出:
在参数method中,ffill(或pad)代表用缺失值的前一个值填充;backfill(或bfill)代表用缺失值的后一个值填充。由于axis默认为0,所以这里的前后值即为上/下一行的值,如果想要使用左右值来填充,则设置axis=1
df.fillna(axis=0, method="ffill")
输出:
参数limit表示填充执行的次数,这里我们赋值为1,则代表仅按行填充1次。
df.fillna(axis=0, method="ffill", limit=1)
输出:
此外,还有一些不太常用的方法。比如除了通过fillna方法来填充缺失值外,还可以通过interpolate方法来填充。默认情况下使用线性差值,可以设置method参数来改变方式。
也可以通过字符串的replace()方法来替换缺失值。本来这部分想作为第三种方法介绍,写完发现有点“听君一席话,好似庄周带净化”,干脆作为小贴士吧。

CSDN音视频技术开发者在线调研正式上线!

现邀开发者们扫码在线调研



往期回顾

Gain 算法实现缺失值预测


破解程序员的5大迷思,《新程序员004》上市!


M2芯片重磅问世,性能提升18%!


AI考生挑战高考作文,平均1秒1篇


分享

点收藏

点点赞

点在看

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/135681
 
202 次点击