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:不替换修改原数据,生成新 的对象
- 1、删除存在缺失值的:dropna(axis=‘rows’)
-
-
如果缺失值没有使用NaN标记,比如使用"?"
- 先替换‘?’为np.nan,然后继续处理
-
2 案例:电影数据的缺失值处理
- 首先读取了csv电影数据,观察发现数据中存在NAN缺失值。
movie_data = pd.read_csv("./data/IMDB-Movie-Data.csv")
movie_data.tail()
- 接着需要对数据进行是否存在NAN判断,常用api有两个如下:
pd.notnull(movie_data) # 数据中不是NAN则返回True,是NAN则返回False
pd.isnull(movie_data) # 数据中是NAN则返回True,不是NAN则返回False
- 上述数据中已经判断存在NAN,接下来需要对数据进行清洗,可以删除或者替换缺失值NAN
-
删除
pandas删除缺失值,使用dropna的前提是,缺失值的类型必须是np.nan。注:dropna删除缺失值数据方法是删除存在NAN的整行数据。
# 不修改原数据
movie_data.dropna()
# 可以定义新的变量接受或者用原来的变量名
data = movie_data.dropna()
- 替换缺失值
movie_data[i].fillna(value=movie_data[i].mean(), inplace=True)
完整代码:
# 对数据中每一列进行判断,只要存在NAN,就用这列数据的平均值替换NAN
for i in movie_data.columns:
if np.any(pd.isnull(movie_data[i])) == True:
movie_data[i].fillna(value = movie_data[i].mean(), inplace = True)
movie_data
3 不是缺失值NAN,其他默认标记
-
比如缺失值是?或者/等符号,那么该如何处理呢?处理思路分析:
-
1、先替换,将其他默认标记符号替换为np.nan
扫描二维码关注公众号,回复: 14454843 查看本文章- df.replace(to_replace=, value=)
- to_replace:替换前的值
- value:替换后的值
- df.replace(to_replace=, value=)
# 把一些其它值标记的缺失值,替换成np.nan
wis = wis.replace(to_replace='?', value=np.nan)
- 2、在进行缺失值的处理,删除或者替换操作
# 删除
wis = wis.dropna()
注:NAN类型实际是float浮点型。
type(np.NAN)
float
创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
Dragon少年 | 文
如果本篇博客有任何错误,请批评指教,不胜感激 !