objective
- 应用isnull判断是否有缺失数据NaN
- 应用fullnull实现缺失值的填充
- 应用dropna实现缺失值的删除
- 应用replace实现数据的替换
1. 如何处理nan
- 获取缺失值的标记方式(NaN或者其他标记方式)
- 如果缺失值的标记方式是NaN:
#判断数据中是否包含NaN pd.isnull(data) pd.notnull(data)
#存在缺失值NaN 1.删除缺失值的: dropna(axis='rows') #不会修改原数据,需要接受返回值 2.替换缺失值: fillna(value, inplace=True) value:替换成的值 inplace=True 修改原数据 inplace=False 不修改原数据
-
如果缺失值没有使用NaN标记,比如使用的是 ‘’ ?‘’
首先用replace 将 ‘ ?’ 替换成NaN,再进行后续处理
2.案例
movie=pd.read_csv('./data.csv') #获取数据
pd.notnull(movie) #判断缺失值是否存在
ps:这样比较麻烦,整个数据集一起出来
优化代码:
np.all(pd.notnull(movie))
ps: 如果是pd.isnull()搭配 np.any()使用
替换所有缺失值:
for i in movie.columns:
if np.all(pd.notnull(movie[i]))==False:
print(i)
movie[i].fillna(movie[i].mean(), inplace=True)
3.案例:
movie=pd.read_csv('./data.csv') #读取数据
movie.head() #惯例
np.all(pd.notnull(movie)) #里面如果有一个缺失值,那么会返回False
data=movie.dropna() #删除缺失值
movie[col2].mean() #计算出col2这列的均值
movie[col2].fillna(movie[col2].mean(),inplace=True) #替换
#打印出有空值的列
for i in movie.columns:
if np.all(pd.notnull(movie[i]))==False:
print(i)
4.案例:
#如果缺失值是'?'
data2=pd.read_csv('./data2.csv')
data2=data2.replace(to_replace='?',value=np.nan)