Pandas-缺失值处理

1 处理缺失值NAN的方法

  • 获取缺失值的标记方式(NaN或者其他标记方式)
  • 如果缺失值的标记方式是NaN,判断数据中是否包含NaN:
    • pd.isnull(df)
    • pd.notnull(df)
np.any(pd.isnull(movie)) # 里面如果有一个缺失值,就返回True
np.all(pd.notnull(movie)) # 里面如果有一个缺失值,就返回False
  • 存在缺失值nan:
    • 删除缺失值:dropna(axis='rows')
      注:需要接受返回值
    • 替换缺失值:fillna(value,inplace=True)
      Value:替换成的值
      inplace:True修改原数据,False不替换原数据,生成新对象
movie.dropna()
movie[i].fillna(value=movie[i].mean(), inplace=True)
  • 如果缺失值没有使用NaN标记,比如使用"?"
    • 将'?'替换为np.nan,然后再处理
    • to_replace:替换前的值,value:替换后的值
wis.replace(to_replace="?", value=np.NaN)

2 电影数据的缺失值处理

电影数据文件获取

# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-Data.csv")

Pandas-缺失值处理

2.1 判断缺失值是否存在

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))

2.2 存在缺失值nan,并且是np.nan

  • 删除
    pandas删除缺失值,使用dropna的前提是,缺失值的类型必须是np.nan
# 不修改原数据
movie.dropna()

# 可以定义新的变量接受或者用原来的变量名
data = movie.dropna()
  • 替换缺失值
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,有默认标记的

  • 读数据
wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data")

Pandas-缺失值处理
以上数据在读取时,可能会报如下错误:

URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)>

解决办法:

# 全局取消证书验证
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

处理思路分析:
1、先替换‘?’为np.nan

# 把一些其它值标记的缺失值,替换成np.nan
wis = wis.replace(to_replace='?', value=np.nan)

2、在进行缺失值的处理

# 删除
wis = wis.dropna()
上一篇:2021-06-17


下一篇:Hexo | 给hexo博客添加douban读书页