pandas 处理缺失值[dropna、drop、fillna][通俗易懂]

pandas 处理缺失值[dropna、drop、fillna][通俗易懂]面对缺失值三种处理方法:option1:去掉含有缺失值的样本(行)option2:将含有缺失值的列(特征向量)去掉option3:将缺失值用某些值填充(0,平均值,中值等)对于dropna和fillna,dataframe和series都有,在这主要讲datafame的对于option1:使用DataFrame.dropna(axis=0,how=’any’,thres…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

面对缺失值三种处理方法:

  • option 1: 去掉含有缺失值的样本(行)
  • option 2:将含有缺失值的列(特征向量)去掉
  • option 3:将缺失值用某些值填充(0,平均值,中值等)

对于dropna和fillna,dataframe和series都有,在这主要讲datafame的

对于option1:

使用DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数说明:

  • axis:
    • axis=0: 删除包含缺失值的行
    • axis=1: 删除包含缺失值的列
  • how: 与axis配合使用
    • how=‘any’ :只要有缺失值出现,就删除该行货列
    • how=‘all’: 所有的值都缺失,才删除行或列
  • thresh: axis中至少有thresh个非缺失值,否则删除
    比如 axis=0,thresh=10:标识如果该行中非缺失值的数量小于10,将删除改行
  • subset: list
    在哪些列中查看是否有缺失值
  • inplace: 是否在原数据上操作。如果为真,返回None否则返回新的copy,去掉了缺失值

建议在使用时将全部的缺省参数都写上,便于快速理解
examples:

 df = pd.DataFrame( { 
    "name": ['Alfred', 'Batman', 'Catwoman'], "toy": [np.nan, 'Batmobile', 'Bullwhip'], "born": [pd.NaT, pd.Timestamp("1940-04-25") pd.NaT]}) >>> df name toy born 0 Alfred NaN NaT 1 Batman Batmobile 1940-04-25 2 Catwoman Bullwhip NaT # Drop the rows where at least one element is missing. >>> df.dropna() name toy born 1 Batman Batmobile 1940-04-25 # Drop the columns where at least one element is missing. >>> df.dropna(axis='columns') name 0 Alfred 1 Batman 2 Catwoman # Drop the rows where all elements are missing. >>> df.dropna(how='all') name toy born 0 Alfred NaN NaT 1 Batman Batmobile 1940-04-25 2 Catwoman Bullwhip NaT # Keep only the rows with at least 2 non-NA values. >>> df.dropna(thresh=2) name toy born 1 Batman Batmobile 1940-04-25 2 Catwoman Bullwhip NaT # Define in which columns to look for missing values. >>> df.dropna(subset=['name', 'born']) name toy born 1 Batman Batmobile 1940-04-25 # Keep the DataFrame with valid entries in the same variable.  >>> df.dropna(inplace=True) >>> df name toy born 1 Batman Batmobile 1940-04-25 

对于option 2:

可以使用dropna 或者drop函数
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

  • labels: 要删除行或列的列表
  • axis: 0 行 ;1 列
 df = pd.DataFrame(np.arange(12).reshape(3,4), columns=['A', 'B', 'C', 'D']) >>>df A B C D 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 # 删除列 >>> df.drop(['B', 'C'], axis=1) A D 0 0 3 1 4 7 2 8 11 >>> df.drop(columns=['B', 'C']) A D 0 0 3 1 4 7 2 8 11 # 删除行(索引) >>> df.drop([0, 1]) A B C D 2 8 9 10 11 

对于option3

使用DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

  • value: scalar, dict, Series, or DataFrame
    dict 可以指定每一行或列用什么值填充
  • method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None
    在列上操作
    • ffill / pad: 使用前一个值来填充缺失值
    • backfill / bfill :使用后一个值来填充缺失值
  • limit 填充的缺失值个数限制。应该不怎么用
f = pd.DataFrame([[np.nan, 2, np.nan, 0], [3, 4, np.nan, 1], [np.nan, np.nan, np.nan, 5], [np.nan, 3, np.nan, 4]], columns=list('ABCD')) >>> df A B C D 0 NaN 2.0 NaN 0 1 3.0 4.0 NaN 1 2 NaN NaN NaN 5 3 NaN 3.0 NaN 4 # 使用0代替所有的缺失值 >>> df.fillna(0) A B C D 0 0.0 2.0 0.0 0 1 3.0 4.0 0.0 1 2 0.0 0.0 0.0 5 3 0.0 3.0 0.0 4 # 使用后边或前边的值填充缺失值 >>> df.fillna(method='ffill') A B C D 0 NaN 2.0 NaN 0 1 3.0 4.0 NaN 1 2 3.0 4.0 NaN 5 3 3.0 3.0 NaN 4 >>>df.fillna(method='bfill') A B C D 0 3.0 2.0 NaN 0 1 3.0 4.0 NaN 1 2 NaN 3.0 NaN 5 3 NaN 3.0 NaN 4 # Replace all NaN elements in column ‘A’, ‘B’, ‘C’, and ‘D’, with 0, 1, 2, and 3 respectively. # 每一列使用不同的缺失值 >>> values = { 
    'A': 0, 'B': 1, 'C': 2, 'D': 3} >>> df.fillna(value=values) A B C D 0 0.0 2.0 2.0 0 1 3.0 4.0 2.0 1 2 0.0 1.0 2.0 5 3 0.0 3.0 2.0 4 #只替换第一个缺失值 >>>df.fillna(value=values, limit=1) A B C D 0 0.0 2.0 2.0 0 1 3.0 4.0 NaN 1 2 NaN 1.0 NaN 5 3 NaN 3.0 NaN 4 

房价分析:
在此问题中,只有bedroom一列有缺失值,按照此三种方法处理代码为:

# option 1 将含有缺失值的行去掉 housing.dropna(subset=["total_bedrooms"]) # option 2 将"total_bedrooms"这一列从数据中去掉 housing.drop("total_bedrooms", axis=1) # option 3 使用"total_bedrooms"的中值填充缺失值 median = housing["total_bedrooms"].median() housing["total_bedrooms"].fillna(median) 
sklearn提供了处理缺失值的 Imputer类,具体的使用教程在这https://blog.csdn.net/dss_dssssd/article/details/82831240
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192190.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mqttnet 详解_MQTTnet 3.0.5学习笔记

    mqttnet 详解_MQTTnet 3.0.5学习笔记段时间在使用MQTTnet,都说这个东西比较好,可是翻了翻网上没有例子给参考一下。今天算是找到了,给高手的帖子做个宣传吧.由于GitHub上介绍的东西比较少,以我的水平真是不知道怎么用,先照葫芦画瓢,再看看怎么回事吧:功能:把订阅与发布做成一个类,还带有自动重连的功能usingSystem.Threading;usingSystem.Threading.Tasks;usingMQTTnet;usi…

    2022年6月25日
  • Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件

    Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件

    2021年10月8日
  • 免费已备案二级域名_二级免备案域名

    免费已备案二级域名_二级免备案域名今天给大家推荐一个免备案的免费二级域名注册平台。DYUNS域名网-永久免费域名_免备案域名只需要一个邮箱,就能注册到自己的二级域名,非常方便。提供”icu.ltd”等超短域名注册服务,非常有利于用户访问与记忆。平台还提供了免费的CDN+防御+免备案服务,这是其他平台都没有的,也是我选择它的理由之一。管理也非常方便,后台一键就能完成自助删改解析等操作。官方客服的服务也是十分的到位,体验很好。大家也可以自行注册体验哦!…

    2022年9月10日
  • SA-SSD训练过程出现nan

    SA-SSD训练过程出现nan

    2020年11月8日
  • 基于51单片机的八位流水灯(三种形式)

    基于51单片机的八位流水灯(三种形式)写一下寒假做的51小项目。基于AT89C51的流水灯:流水灯共八个,可以实现交替闪烁,一起闪烁,左右流水灯等效果。模式一:按动key1,实现1,3,5,7和2,4,6,8交替闪烁;模式二:按动key2,实现D1→D8流水灯效果;模式三:按动key3,实现全部闪烁效果,时间间隔为0.5秒;模式四:按动key4,实现D8→D1流水灯效果;模式1:使用P1的取反和delay延时实现模式2…

    2022年6月10日
  • Win8.1应用开发之异步编程

    Win8.1应用开发之异步编程

    2022年1月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号