看下面这张图片,其中有缺失值NaN,处理数据时需要先对缺失值进行处理
-
获取缺失值的标记方式(NaN或者其他标记方式)
-
如果缺失值的标记方式是NaN
-
判断数据中是否包含NaN:
- pd.isnull(df), 【有缺失值时返回True,否则False】
- pd.notnull(df) 【与isnull相反】
-
存在缺失值nan:
-
1、删除存在缺失值的:dropna(axis='rows')
- 注:不会修改原数据,需要接受返回值
-
2、替换缺失值:fillna(value, inplace=True)
- value:替换成的值
- inplace:True:会修改原数据,False:不替换修改原数据,生成新的对象
-
-
-
如果缺失值没有使用NaN标记,比如使用"?"
- 先替换‘?’为np.nan,然后继续处理
- 电影数据文件获取
# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-Data.csv")
- pd.notnull()
pd.notnull(movie)
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
3 True True True True True True True True True True True True
4 True True True True True True True True True True True True
5 True True True True True True True True True True True True
6 True True True True True True True True True True True True
7 True True True True True True True True True True False True
-
np.all(pd.notnull(movie))
- pd.isnull()
- 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)

数据是这样的:
wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data")
以上数据在读取时,可能会报如下错误:
URLError:
解决办法:
# 全局取消证书验证
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
处理思路分析:
- 1、先替换‘?’为np.nan
- 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()
