码迷,mamicode.com
首页 > 其他好文 > 详细

Pandas-04-缺失值处理

时间:2021-05-04 16:03:00      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:lan   str   alt   pytho   arc   综合   imp   scons   any   

1. 如何处理NaN

  • 获取缺失值的标记方式(NaN或其他标记方式)

    • 如果缺失值的标记方式是NaN

      • 判断数据是否包含NaN:

        • pd.isnull(df)
        • pd.notnull(df)
      • 存在缺失值NaN:

        1. 删除存在的缺失值:

          dropna(axis=‘rows‘)

          注:不会修改原数据,而是返回删除后的数据

        2. 替换缺失值:

          fillna(value, inplace=True)

          • value:要替换为的值
          • inplace:True:会直接修改原数据,False:返回修改后的数据
    • 如果缺失值没有使用NaN标记,比如使用 “ ? ”

      • 先替换"?"为np.nan,然后继续处理

2. 案例:电影数据的缺失值处理

  • 读取电影文件获取数据

    movie = pd.read_csv("./data/IMDB-Movie-Data.csv")
    

    技术图片

2.1. 判断缺失值是否存在

pd.notnull(movie)
# df直接调用notnull也可
movie.notnull()

技术图片

可以用np.all或np.any来综合判断数据中是否有缺失值

np.all(pd.notnull(movie))  # 如果全为True,则返回True,说明没有缺失值
# 或
np.all(movie.notnull())  # 如果全为True,则返回True,说明没有缺失值

np.any(pd.isnull(movie))  # 如果存在True,则返回True,说明有缺失值
# 或
np.any(movie.isnull())  # 如果存在True,则返回True,说明有缺失值

2.2. 存在缺失值NaN,并且是np.nan

  1. 删除

    pandas删除缺失值,使用dropna的前提是缺失值的类型必须是np.nan

    # 不改变原数据,所以用新变量接收
    droped_movie = movie.dropna()
    
  2. 替换

    替换所有缺失值

    for col in movie.columns:
        if np.any(movie[col].isnull()):  # 如果存在缺失值
            movie[col].fillna(movie[col].mean(), inplace=True)  # 用该列的平均值填充
    

2.3. 缺失值不是NaN,有默认标记的

以缺失值为 "?" 为例:

wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data")

如果报URLError提示SSL证书错误:

# 全局取消证书验证
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

处理思路:

  1. 先替换"?"为np.nan

    df.replace(to_replace=, value=)

    • to_replace:替换前的值
    • value:替换后的值
    # 把其他标记的缺失值,替换成np.nan
    wis.replace(to_replace="?", value=np.nan)
    
  2. 再进行缺失值的处理

    # 删除
    wis = wis.dropna()
    

3. 总结

  • isnull、notnull判断是否存在缺失值【知道】

    • np.all(movie.notnull()) # 如果全为True,则返回True,说明没有缺失值

      np.all(movie.notnull()) # 如果全为True,则返回True,说明没有缺失值

    • np.any(movie.isnull()) # 如果存在True,则返回True,说明有缺失值

      np.any(movie.isnull()) # 如果存在True,则返回True,说明有缺失值

  • dropna删除np.nan标记的缺失值【知道】

    • movie.dropna()
  • fillna填充缺失值【知道】

    • movie[col].fillna(movie[col].mean(), inplace=True) # 用该列的平均值填充
  • replace替换某些具体值【知道】

    • wis.replace(to_replace="?", value=np.nan)

Pandas-04-缺失值处理

标签:lan   str   alt   pytho   arc   综合   imp   scons   any   

原文地址:https://www.cnblogs.com/fade-color/p/14725725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!