高级处理-缺失值处理
1 如何处理 nan
 (1) (1) (1) (1).fd84f58e.png)
- 获取缺失值的标记方式(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:
- 如果缺失值没有使用 NaN 标记,比如使用"?"
- 先替换‘?’为 np.nan,然后继续处理
2 电影数据的缺失值处理
- 电影数据文件获取
python
# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-Data.csv")# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-Data.csv") (1) (1) (1) (1).3c9f2f1a.png)
2.1 判断缺失值是否存在
- pd.notnull()
pd.notnull(movie)pd.notnull(movie)python
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 TrueRank 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 Truepython
np.all(pd.notnull(movie))np.all(pd.notnull(movie))- pd.isnull()
2.2 存在缺失值 nan,并且是 np.nan
- 1、删除
pandas 删除缺失值,使用 dropna 的前提是,缺失值的类型必须是 np.nan
python
# 不修改原数据
movie.dropna()
# 可以定义新的变量接受或者用原来的变量名
data = movie.dropna()# 不修改原数据
movie.dropna()
# 可以定义新的变量接受或者用原来的变量名
data = movie.dropna()- 2、替换缺失值
python
# 替换存在缺失值的样本的两列
# 替换填充平均值,中位数
# movie['Revenue (Millions)'].fillna(movie['Revenue (Millions)'].mean(), inplace=True)# 替换存在缺失值的样本的两列
# 替换填充平均值,中位数
# movie['Revenue (Millions)'].fillna(movie['Revenue (Millions)'].mean(), inplace=True)替换所有缺失值:
python
for i in movie.columns:
if np.all(pd.notnull(movie[i])) == False:
print(i)
movie[i].fillna(movie[i].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) (1) (1) (1).6c032fd3.png)
python
wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data")wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data")以上数据在读取时,可能会报如下错误:
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)>URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)>解决办法:
python
# 全局取消证书验证
import ssl
ssl._create_default_https_context = ssl._create_unverified_context# 全局取消证书验证
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=)
python
# 把一些其它值标记的缺失值,替换成np.nan
wis = wis.replace(to_replace='?', value=np.nan)# 把一些其它值标记的缺失值,替换成np.nan
wis = wis.replace(to_replace='?', value=np.nan)- 2、在进行缺失值的处理
python
# 删除
wis = wis.dropna()# 删除
wis = wis.dropna()