数据预处理_缺失值

一、缺失值处理

  • 数据缺失主要包括记录缺失和字段信息缺失等情况,其对数据分析会有较大影响,导致结果不确定性更加显著
  • 缺失值处理方法:
    • 丢弃 → 删除
    • 插补 → 均值、中位数、众数插补 / 临近值插补 / 插值法
    • 不处理
# 设置cell多行输出

from IPython.core.interactiveshell import InteractiveShell 
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'

# 导入相关库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
import warnings

warnings.filterwarnings('ignore')
os.chdir(r'E:\python_learn\data')
file_name = 'iris-data.csv'
iris_data = pd.read_csv(file_name,engine='python')
iris_data.head()
image.png

本次缺失值处理使用的数据集为修改过的鸢尾花卉数据,将对该数据集进行缺失值处理处理。其中,
sepal_length_cm为花萼长度
sepal_width_com为花萼宽度
petal_length_cm为花瓣长度
petal_length_cm为花瓣宽度
class为鸢尾花类别

通过这4个数据,能判断并分类出3种鸢尾花的类别。

# 查看数基本结构
iris_data.info()

# 一共150条数据,5个字段
# 从返回基本结构可以看到除了class字段,其他字段都含有缺失值
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):
sepal_length_cm    147 non-null float64
sepal_width_cm     148 non-null float64
petal_length_cm    144 non-null float64
petal_width_cm     144 non-null float64
class              150 non-null object
dtypes: float64(4), object(1)
memory usage: 5.9+ KB
# 缺失值判断
iris_data.isna().sum()
sepal_length_cm    3
sepal_width_cm     2
petal_length_cm    6
petal_width_cm     6
class              0
dtype: int64

1.1丢弃处理

(1)丢弃处理

→用pandas的dropna()方法,删除含NaN的行或列

  • 删除带缺失值记录或列字段,虽减少缺失值对样本的影响,但也意味着减少数据特征。

  • !!面对以下2种情况不宜丢弃处理缺失值:

    • 缺失值超过比例较大,超过10%
    • 带缺失值的label标签主要集中于某一类或几类,删除会使样本丢失大量特征信息
iris_dropna_1 = iris_data.dropna()    # 缺失值删除处理
# 默认how=any,axis=0,行记录任意出现NaN就删除行记录

iris_dropna_1.isna().sum()  
iris_dropna_1.isna().sum().sum()  # 缺失值检查
sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
class              0
dtype: int64

0
iris_dropna_2 = iris_data.dropna(how='all')  # 缺失值删除处理
# how=all,当整行记录都为NaN才删除记录

iris_dropna_2.isna().sum()  
iris_dropna_2.isna().sum().sum()  # 缺失值检查,发现并没有删除,表示不存在整行都为NaN的情况
sepal_length_cm    3
sepal_width_cm     2
petal_length_cm    6
petal_width_cm     6
class              0
dtype: int64

17

因本次演练数据集样本量较少,不选择删除缺失值的处理方法

1.2插补处理

当数据集不宜采用丢弃的方法处理缺失值时,可以使用插补的方法补全缺失值。

(1)均值/中位数/众数插补

→ pandas的fillna()方法

iris_fillna_1 = iris_data.fillna(iris_data.median())  # 在不确定是否存在异常值时,此处选择时候中位数填补
iris_fillna_1.isna().sum()
sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
class              0
dtype: int64

→ sklearn.impute的SimpleImputer数据预处理方法

from sklearn.impute import SimpleImputer
iris_nan_model = SimpleImputer(missing_values=np.nan,strategy='median')   # 用中位数替换NaN
iris_nan_result = iris_nan_model.fit_transform(np.array(iris_data)[:,:4]) # 应用模型,数据以数组形式传入
iris_result = pd.DataFrame(iris_nan_result,columns=['sepal_length_cm','sepal_width_cm','petal_length_cm','petal_width_cm'])

iris_result.isna().sum()
iris_result.isna().sum().sum()
sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
dtype: int64

0

(2)临近值插补

→pandas的fillna()方法,设置method参数;method=ffill,用前面值替换NaN;method=bfill,用后面值替换NaN

iris_data.head()
iris_fillna_2 = iris_data.fillna(method='ffill')
iris_fillna_2.head()

iris_result.isna().sum()
iris_result.isna().sum().sum()
image.png
sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
dtype: int64

0

(3)插值法

→ 拉格朗日插值法:将缺失函数值对应的点x代入插值多项式得到缺失值的近似值L(x)

from scipy.interpolate import lagrange   # 导入拉格朗日插值函数

iris_lagrange = iris_data.copy()  # 复制一份原数据,用于操作
print(iris_lagrange.head())

# 自定义列向量插值函数
# s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_columnn(s,n,k=5):
    y = s[list(range(n-k,n))+list(range(n+1,n+1+k))]   # 取数
    y = y[y.notna()]                                    # 剔除空值
    return lagrange(y.index,list(y))(n)                 # 插值并返回插值结果

# 逐个元素判断是否需要插值
for i in iris_lagrange.columns:
    for j in range(len(iris_lagrange)):
        if (iris_lagrange[i].isna())[j]:
            iris_lagrange[i][j] = ployinterp_columnn(iris_lagrange[i],j)

iris_lagrange.isna().sum()
iris_lagrange.isna().sum().sum()  # 缺失值检查
print(iris_lagrange.head())
   sepal_length_cm  sepal_width_cm  petal_length_cm  petal_width_cm  \
0              5.1             3.5              1.4             0.2   
1              4.9             3.0              1.4             0.2   
2              4.7             3.2              1.3             NaN   
3              4.6             3.1              1.5             0.2   
4              5.0             3.6              1.4             0.2   

         class  
0  Iris-setosa  
1  Iris-setosa  
2  Iris-setosa  
3  Iris-setosa  
4  Iris-setosa  





sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
class              0
dtype: int64






0



   sepal_length_cm  sepal_width_cm  petal_length_cm  petal_width_cm  \
0              5.1             3.5              1.4        0.200000   
1              4.9             3.0              1.4        0.200000   
2              4.7             3.2              1.3        0.273333   
3              4.6             3.1              1.5        0.200000   
4              5.0             3.6              1.4        0.200000   

         class  
0  Iris-setosa  
1  Iris-setosa  
2  Iris-setosa  
3  Iris-setosa  
4  Iris-setosa  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容

  • 个人不建议填充缺失值,建议设置哑变量或者剔除该变量,填充成本较高 常见填充缺失值的方法: 1.均值、众数填充,填充...
    slade_sal阅读 4,842评论 0 0
  • 一、认识缺失值 在我们的数据分析过程中,经常会碰到缺失值的情况。缺失值产生的原因很多,比如人工输入失误,系统出错,...
    鸣人吃土豆阅读 6,016评论 0 11
  • 数据预处理 原因在数据挖掘中,海量的原始数据中存在着大量不完整(有缺失值)、不一致、有异常的数据,严重影响到数据挖...
    张雅琛阅读 749评论 0 1
  • 数据预处理步骤有数据清洗、数据集成、数据变换、数据规约。实际工作中不是每一步都必须。 版本一: 缺失值处理对于缺失...
    apricoter阅读 3,315评论 0 8
  • 原文首发于我的博客欢迎关注 当我们拿到一批数据的时候,往往都是“不干净”的,而缺失值是最常见也是最容易发现的。不同...
    tikyle阅读 11,515评论 0 8