突发!员工跳楼!只拿低保工资!央企设计院集体罢工!

突发!北京某院集体罢工!

淄博向东,惠泊向西:在人民与人民币之间,惠泊停车选择了人民币

【少儿禁】马建《亮出你的舌苔或空空荡荡》

10部适合女性看的唯美情色电影

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

Python数据分析之缺失值处理

胡萝卜酱 DataGo数据狗 2022-07-01

数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,去除与数据挖掘主题无关的数据,处理缺失值、异常值等。这里主要讲对数据中的缺失值进行处理。

 类型 


缺失值主要分为完全随机缺失,随机缺失和完全非随机缺失三类。

完全随机缺失(missing completely at random,MCAR)

数据的缺失是随机的,数据的缺失不依赖于任何不完全变量或完全变量。

随机缺失(missing at random,MAR)

数据的缺失不是完全随机的,即该类数据的缺失依赖于其他完全变量。

完全非随机缺失(missing not at random,MNAR)

数据的缺失依赖于不完全变量自身。

 处理方式 


处理缺失值的方法可分为3类:删除记录、数据插补和不处理。

删除数据

生成缺失值:

  1. import pandas as pd

  2. import numpy as np

  3. # 生成缺失数据

  4. df = pd.DataFrame(np.random.randn(6, 4), columns=['A', 'B', 'C', 'D'])  # 生成一份数据

  5. df.iloc[1:2, 1] = np.nan  # 增加缺失值

  6. df.iloc[3, 2] = np.nan  # 增加缺失值

  7. df.iloc[4,3] = np.nan  # 增加缺失值

  8. print (df)


输出:


检测缺失值

  nan_all = df.isnull()  # 获得所有数据框中的N值

  1. print (nan_all)  # 打印输出

  2. # 查看哪些列缺失

  3. nan_col1 = df.isnull().any()  # 获得含有NA的列

  4. print (nan_col1)  # 打印输出

  5. nan_col2 = df.isnull().all()  # 获得全部为NA的列

  6. print (nan_col2)  # 打印输出

输出:

删除缺失值:

  1. df1 = df.dropna()  # 直接删除含有NA的行记录

  2. print (df1)  # 打印输出

输出:

数据插补

常用的插补方法有:

  • 均值/中位数/众数插补

  • 使用固定值

  • 最近邻插补

  • 回归方法

  • 插值法

此处只简要列出两类插补方式的代码。

均值/中位数/众数插补

  1. df_mean = df.fillna(np.mean(df)) # 均值插补

  2. print (df_mean)

  3. # 中位数插补 df_median = df.fillna(np.median(df))
    # 众数插补 df_mode = df.fillna(np.argmax(np.bincount(df)))

输出:

拉格朗日插值法

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

  2. #s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5

  3. def ployinterp_column(s, n, k=5):

  4.  y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数

  5.  y = y[y.notnull()] #剔除空值

  6.  return lagrange(y.index, list(y))(n) #插值并返回插值结果

  7. #逐个元素判断是否需要插值

  8. for i in df.columns:

  9.  for j in range(len(df)):

  10.    if (df[i].isnull())[j]: #如果为空即插值。

  11.      df[i][j] = ployinterp_column(df[i], j)

  12. print (df)

输出:


在处理缺失值时,直接删除减少了数据的完备性,造成了资源浪费,同时丢弃了大量隐藏在这些记录中的信息,因此,我们最常使用的方式是插补。在大量的插补方法中,最推荐使用插值法,这种方式能极大的保留这些缺失数据的特性。

文章有问题?点此查看未经处理的缓存