目标:
· 应用isnull判断缺失数据NaN是否存在
· 应用fillna填充缺失数据
· 应用dropna删除缺失数据
· 应用replace替换缺失数据
首先判断缺失值的标记方式(NaN或者其它标记方式)
· 如果标记方式为NaN
判断数据中是否包含NaN:
· pd.isnull(df)(存在缺失值返回True)
· pd.notnull(df)(不存在缺失值返回True)
存在缺失值NaN
· 删除存在缺失值:dropna(axis='rows')
· 注意,不会修改原数据,需要接收返回值
· 替换缺失值:fillna(value, inplace=True)
· value:替换值;
· inplace:若为True则修改原数据,若为False则会返回新对象;
# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-data.csv")
# 判断缺失值是否存在
print(np.all(pd.notnull(movie)))
# 存在缺失值NaN
# 删除:
movie.dropna()
data = movie.dropna()
# 替换:
# 替换存在缺失值的样本的两列
# 替换填充平均数、中位数
# 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)
· 如果标记方式是其它方式
将其它标记方式替换为NaN标记,然后继续处理
· df.replace(to_replace=, value=)
· to_replace:替换前的值
· value:替换后的值
# 使用另一种标记方法
# 将另一种标记方式(“?”)替换为NaN
movie = movie.replace(to_replace='?', value=np.nan)
# 再进行缺失值处理
data = movie.dropna()