5-pandas 缺失值的处理

1 如何处理nan

  • 判断数据是否为NaN:

    • pd.isnull(df),
    • pd.notnull(df)
  • 处理方式:

    • 存在缺失值nan,并且是np.nan:

      • 1、删除存在缺失值的:dropna(axis='rows')

        • 注:不会修改原数据,需要接受返回值
      • 2、替换缺失值:fillna(value, inplace=True)

        • value:替换成的值

        • inplace:True:会修改原数据,False:不替换修改原数据,生成新的对象

    • 不是缺失值nan,有默认标记的

 

2 电影数据的缺失值处理

  • 电影数据文件获取  
# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-Data.csv")
movie

2.1 判断缺失值是否存在

  • pd.notnull()
pd.notnull(movie).head()

Rank    Title    Genre    Description    Director    Actors    Year    Runtime (Minutes)    Rating    Votes    Revenue (Millions)    Metascore
0    True    True    True    True    True    True    True    True    True    True    True    True
1    True    True    True    True    True    True    True    True    True    True    True    True
2    True    True    True    True    True    True    True    True    True    True    True    True
np.all(pd.notnull(movie))

False

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

  • 1、删除

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

# 不修改原数据
movie.dropna()

# 可以定义新的变量接受或者用原来的变量名
data = movie.dropna()

 

  • 2、替换缺失值
# 替换存在缺失值的样本的两列
# 替换填充平均值,中位数
# movie['Revenue (Millions)'].fillna(movie['Revenue (Millions)'].mean(), inplace=True)

替换所有缺失值:

for i in movie.columns:
    if np.all(pd.notnull(movie[i])) == False:
        print(i)
        movie[i].fillna(movie[i].mean(), inplace=True)

 

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

处理思路分析:

  • 1、先替换‘?’为np.nan
    • df.replace(to_replace=, value=)
      • to_replace:替换前的值
      • value:替换后的值
      • # 把一些其它值标记的缺失值,替换成np.nan
        wis = wis.replace(to_replace='?', value=np.nan)
  • 2、在进行缺失值的处理
  • # 删除
    wis = wis.dropna()

     

 

posted on 2021-06-08 15:40  paike123  阅读(112)  评论(0编辑  收藏  举报

导航