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)
- df.replace(to_replace=, value=)
- 2、在进行缺失值的处理
-
# 删除 wis = wis.dropna()