缺失值处理(判断-加载-可视化)

1. 简介

很多数据集都含缺失值,在数据库中,缺失值表示为NULL. 在某些编程语言中用NA表示,它也可能是 空字符串 或数值. 在pandas中缺失值=NAN.

2.缺失值判断

pandas中NaN来自NumPy库, NumPy中缺失值有三种表示形式: NaN,nan,NAN. 缺失值毫无意义.不等于0,也不是空字符串.

from numpy import NaN,NAN,nan
print(NaN == True)   # False
print(NaN == False)  # False
print(NaN ==0)    # False
print(NaN == '')  # False
print(NaN ==nan)   # false
pandas 方法 : isnull / isna(判断为空) / notnull / notna(判断不为空) 测量某个值是否为缺失值
import pandas as pd
print(pd.isnull(NaN))   # True
print(pd.isna(nan))     # True
print(pd.isna(NAN))     # True
print(pd.notnull(22))   # True
print(pd.notna(nan))    # False

2. 加载缺失值

缺失值来源 : 原始数据包含缺失值 / 数据整理中产生缺失值

加载数据时可以通过 keep_default_na , na_values指定加载数据时候的缺失值

pd.read_csv('/export/data/survey_visited.csv')  # 加载数据
pd.read_csv('/export/data/survey_visited.csv',keep_default_na = False)# 加载数据时 不加载缺失值,忽略
pd.read_csv('/export/data/survey_visited.csv',na_values=[""],keep_default_na = False) # 手动指定某些数据为: 缺失值

3. 处理缺失值

pd.read_csv('/export/data/survey_visited.csv')  # 加载数据
pd.read_csv('/export/data/survey_visited.csv',keep_default_na = False)# 加载数据 不包括默认缺失值 
pd.read_csv('/export/data/survey_visited.csv',na_values=["734",'844'],keep_default_na = False) # 加载数据手动指定缺失值

4. 缺失值可视化

import pandas as pd
train = pd.read_csv('/export/data/titanic.csv')
train.head()
train.shape
train.info()
train['survived'].value_counts()

可视化模块 pip install matplotlib       --  查看缺失值

# 可视化模块 查看缺失值
import missingno as msno
msno.bar(train)  #柱状图
# 查看缺失值相关性
msno.heatmap(train)  # 热点图

5. 删除缺失值

1.删除缺失值会导致损失信息,一般不推荐.

  1. 按行删除  dropna()

    import pandas as pd
    # 加载数据
    train = pd.read_csv('/export/data/titanic_train.csv')
    # dropna() 默认按行删除  只要那行有空值 .
    train.dropna()
    
    # 带参 axis : 0 / 'rows' 按行删  1 / 'columns'按列删  
    #      how  : any  该行/列有一个NAN 就删   all 该行/列全为NAN删
    train.dropna(axis = 0 ,how = 'any)
    
    # 传入列名删除
    # 删除时, 参考该列的值, 该列值 为空, 才删除该行
    train.dropna(subset = ['age'])
  2. 按列删除时 , 不能传入列名

    train.dropna(axis = 'columns',how = 'any') #只要该列有空值 就删除该列
    train.dropna(axis = 'columns', how = 'all') # 该列全为空,才删

    6. 缺失值处理--填充缺失值

        6.1  非时间序列数据填充

train.isnull().sum() # 计算每列空值 true为1 
train.fillna(0)      # 用0 代替空值
# 细节: 非时间序列数据, 在填充时,可以采用:常量,平均值,中位数...
# 用平均年龄填充空值
train['age'].fillna(train['age'].mean())

        6.2 时间序列数据 -- 填充缺失值

# parse_dates参数 把某列值 转成 日期类型
# index_col 把某列index_col设置为DataFrame的索引。
city_data = pd.read_csv('data/city_day.csv'), parse_dates = ['DATe'], index_col = 'DATe)
# 查看每列缺失值情况
city_data.isnull().sum()

fillna() 固定值填充

city_data['Xylene'][40:60].isnull().sum()
city_data['Xylene'][40:60].fillna(0)
city_data['Xylene'][40:60].fillna(0).isnull().sum()

fillna() 用缺失值上一个数据 填充  method = 'ffill'

city_data['Xylene'][40:60].fillna(method = 'ffill')

用缺失值下一个数据填充 'bfill'

city_data['Xylene'][40:60].fillna(method = 'ffill')

线性填充 ,让程序根据上一个非空和下一个非控股,推测线性数据填充空值

interpolate(limit_direction=)它有三个值: forward(前), backward(后), both(前后)
city_data['Xylene'][40:60].interpolate(limit_direction = 'both') # 参考前后值
city_data['Xylene'][40:60].interpolate(limit_direction = 'backward') # 参考前值
city_data['Xylene'][40:60].interpolate(limit_direction = 'forward')  # 参考后

总结

删除缺失值 : 按行/按列

填充缺失值: 默认值 /统计值/填充  时间序列数据,用前/后值填充, 线性插值填充,算法填充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值