何为缺失值?
缺失值介绍
-
很多的数据集中因为数据量过大,并不是每一条数据都有完整的字段,缺失值字面意思就是某一条数据中有为空的字段,为空的字段就为缺失值。
-
在pandas中缺失值用NaN表示
-
pandas中的NaN来自于Numpy库,Numpy中的缺失值有NaN、NAN和nan,三个值都是一样的。
-
缺失值和别的类型不同,毫无意义,NaN不为0,也不是空字符串,NaN也不等于NaN。
判断是否是缺失值
isnull
是缺失值时为True,否则为Falsenotnull
与isnull相反
缺失值是怎么出现的?
-
原始数据中本来就包含缺失值
-
数据整理的过程中出现的缺失值
默认读取数据时是加载出缺失值的
添加参数keep_default_na=False,读取数据时默认不加载缺失值
pd.read_csv('data/survey_visited.csv',keep_default_na=False)
读取数据时手动指定缺失值
# 指定?为缺失值
pd.read_csv('data/survey_visited.csv',na_values['?'],keep_default_na=False)
缺失值可视化
自定义函数展示缺失值数据:
# 读取数据
train=pd.read_csv('data/titanic_train.csv')
def missing_values_table(df):
# 数据集内每一列缺失值的数量总和
mis_val = df.isnull().sum()
# 算出每列缺失值的占比
mis_val_percent = 100 * mis_val / len(df)
# 连接为新的DataFrame对象
mis_val_table = pd.concat([mis_val,mis_val_percent],axis=1)
# 占比 保留两位小数
mis_val_table[1] = round(mis_val_table[1],2)
# 按缺失值数量降序排序
mis_val_table = mis_val_table[mis_val_table[0] != 0].sort_values(by=0,ascending=False)
# 修改列名为中文
mis_val_table_ren_columns = mis_val_table.rename(columns={0:'缺失值数量',1:'缺失值占比(%)'})
# 打印信息
print ("传入的数据集中共 " + str(df.shape[1]) + " 列.\n其中 " + str(mis_val_table_ren_columns.shape[0]) +"列包含缺失值")
# 返回缺失值数据的新的DataFrame
return mis_val_table_ren_columns
missing_values_table(train)
使用Missingno库对缺失值进行可视化展示
使用missingno库画出缺失值柱状图bar(数据集)方法:
import missingno as msno
print(train.shape)
msno.bar(train)
空白为缺失值:
matrix(数据集)方法
msno.matrix(train)