• 售前

  • 售后

热门帖子
入门百科

pandas || df.dropna() 缺失值删除操纵

[复制链接]
找食的麻雀粮 显示全部楼层 发表于 2021-10-26 14:14:55 |阅读模式 打印 上一主题 下一主题
df.dropna()函数用于删除dataframe数据中的缺失数据,即 删除NaN数据.
官方函数阐明:
  1. DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
  2. Remove missing values.
  3. See the User Guide for more on which values are considered missing,
  4. and how to work with missing data.
  5. Returns
  6. DataFrame
  7. DataFrame with NA entries dropped from it.
复制代码
参数阐明:
      Parameters      阐明                  axis      0为行 1为列,default 0,数据删除维度              how      {‘any', ‘all'}, default ‘any',any:删除带有nan的行;all:删除全为nan的行              thresh      int,生存至少 int 个非nan行              subset      list,在特定列缺失值处理              inplace      bool,是否修改源文件    测试:
  1. >>>df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
  2.           "toy": [np.nan, 'Batmobile', 'Bullwhip'],
  3.           "born": [pd.NaT, pd.Timestamp("1940-04-25"),
  4.               pd.NaT]})
复制代码
  1. >>>df
  2.     name    toy    born
  3. 0  Alfred    NaN    NaT
  4. 1  Batman Batmobile 1940-04-25
  5. 2 Catwoman  Bullwhip    NaT
复制代码
删除至少缺少一个元素的行:
  1. >>>df.dropna()
  2.    name    toy    born
  3. 1 Batman Batmobile 1940-04-25
复制代码
删除至少缺少一个元素的列:
  1. >>>df.dropna(axis=1)
  2.     name
  3. 0  Alfred
  4. 1  Batman
  5. 2 Catwoman
复制代码
删除所有元素丢失的行:
  1. >>>df.dropna(how='all')
  2.     name    toy    born
  3. 0  Alfred    NaN    NaT
  4. 1  Batman Batmobile 1940-04-25
  5. 2 Catwoman  Bullwhip    NaT
复制代码
只生存至少2个非NA值的行:
  1. >>>df.dropna(thresh=2)
  2.     name    toy    born
  3. 1  Batman Batmobile 1940-04-25
  4. 2 Catwoman  Bullwhip    NaT
复制代码
从特定列中查找缺少的值:
  1. >>>df.dropna(subset=['name', 'born'])
  2.     name    toy    born
  3. 1  Batman Batmobile 1940-04-25
复制代码
修改原数据:
  1. >>>df.dropna(inplace=True)
  2. >>>df
  3.    name    toy    born
  4. 1 Batman Batmobile 1940-04-25
复制代码
以上。
补充:Pandas 之Dropna滤除缺失数据
约定:
  1. import pandas as pd
  2. import numpy as np
  3. from numpy import nan as NaN
复制代码
滤除缺失数据
pandas的设计目标之一就是使得处理缺失数据的任务更加轻松些。pandas利用NaN作为缺失数据的标记。
利用dropna使得滤除缺失数据更加得心应手。
一、处理Series对象

通过**dropna()**滤除缺失数据:
  1. se1=pd.Series([4,NaN,8,NaN,5])
  2. print(se1)
  3. se1.dropna()
复制代码
代码效果:
  1. 0  4.0
  2. 1  NaN
  3. 2  8.0
  4. 3  NaN
  5. 4  5.0
  6. dtype: float64
  7. 0  4.0
  8. 2  8.0
  9. 4  5.0
  10. dtype: float64
复制代码
通过布尔序列也能滤除:
  1. se1[se1.notnull()]
复制代码
代码效果:
  1. 0  4.0
  2. 2  8.0
  3. 4  5.0
  4. dtype: float64
复制代码
二、处理DataFrame对象

处理DataFrame对象比力复杂,因为你大概需要抛弃所有的NaN或部门NaN。
  1. df1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])
  2. df1
复制代码
代码效果:
            0      1      2                  0      1.0      2.0      3.0              1      NaN      NaN      2.0              2      NaN      NaN      NaN              3      8.0      8.0      NaN    默认滤除所有包含NaN:
  1. df1.dropna()
复制代码
代码效果:
            0      1      2                  0      1.0      2.0      3.0    传入**how=‘all'**滤除全为NaN的行:
  1. df1.dropna(how='all')
复制代码
代码效果:
            0      1      2                  0      1.0      2.0      3.0              1      NaN      NaN      2.0              3      8.0      8.0      NaN    传入axis=1滤除列:
  1. df1[3]=NaN
  2. df1
复制代码
代码效果:
            0      1      2      3                  0      1.0      2.0      3.0      NaN              1      NaN      NaN      2.0      NaN              2      NaN      NaN      NaN      NaN              3      8.0      8.0      NaN      NaN   
  1. df1.dropna(axis=1,how="all")
复制代码
代码效果:
            0      1      2                  0      1.0      2.0      3.0              1      NaN      NaN      2.0              2      NaN      NaN      NaN              3      8.0      8.0      NaN    传入thresh=n生存至少有n个非NaN数据的行:
  1. df1.dropna(thresh=1)
复制代码
代码效果:
            0      1      2      3                  0      1.0      2.0      3.0      NaN              1      NaN      NaN      2.0      NaN              3      8.0      8.0      NaN      NaN   
  1. df1.dropna(thresh=3)
复制代码
代码效果:
            0      1      2      3                  0      1.0      2.0      3.0      NaN    以上为个人履历,盼望能给各人一个参考,也盼望各人多多支持草根技术分享。如有错误或未思量完全的地方,望不吝赐教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作