数据分析面试手册《缺失处理篇》

简介: 7大缺失值处理方法集合。
对于从事数据相关工作的小伙伴,面试的时候经常会被问到如何进行缺失值/异常值的处理,本文来梳理一下填补缺失值的7种方法。

示例数据
本文所使用的示例数据创建如下:

import pandas as pd
import numpy as np

data = pd.DataFrame({
    'name': ['Bob', 'Mary', 'Peter', np.nan, 'Lucy'],
    'score': [99, 100, np.nan, 91, 95],
    'class': ['class1', 'class2', 'class1', 'class2', np.nan],
    'sex': ['male', 'fmale', 'male', 'male', 'fmale'],
    'age': [23, 25, 20, 19, 24]
})

在这里插入图片描述

一、均值填充

  • 适用数据类型:数值类型
  • 适用场景:数据整体极值差异不大时
  • 举例:对成年男性身高的缺失值进行填充
  • 代码示例:对data数据中的score进行均值填充
data['score'].fillna(data['score'].mean())
# 结果如下
0     99.00
1    100.00
2     96.25
3     91.00
4     95.00

二、中位数填充

  • 适用数据类型:数值类型
  • 适用场景:数据整体极值差异较大时
  • 举例:对人均收入进行填充(数据中含有高收入人群:如马总)
  • 代码示例:对data数据中的score进行中位数填充
data['score'].fillna(data['score'].median())
# 结果如下
0     99.0
1    100.0
2     97.0
3     91.0
4     95.0

三、众数填充

  • 适用数据类型:字符类型|没有大小关系的数值类型数据
  • 适用场景:大多数情况下
  • 举例:对城市信息的缺失进行填充/对工人车间编号进行填充
  • 代码示例:对data数据中的class进行众数填充(注意:众数填充时要通过索引0进行取值,一组数据的众数可能有多个,索引为0的数据一定会存在)
data['class'].fillna(data['class'].mode()[0])
# 结果如下
0    class1
1    class2
2    class1
3    class2
4    class1

四、前后数据填充

  • 适用数据类型:数值类型|字符类型
  • 适用场景:数据行与行之间具有前后关系时
  • 举例:学年成绩排行中的某同学某科目成绩丢失
  • 代码示例:对data数据中的score进行前后数据填充
# 前文填充
data['score'].fillna(method='pad')
# 后文填充
data['score'].fillna(method='bfill')
# 前文填充结果
0     99.0
1    100.0
2    100.0
3     91.0
4     95.0
# 后文填充结果
0     99.0
1    100.0
2     91.0
3     91.0
4     95.0

五、自定义数据填充

  • 适用数据类型:数值类型|字符类型
  • 适用场景:业务规定外的数据
  • 举例:某调查问卷对婚后幸福程度进行调查,到那时很多人是未婚,可以自定义内容表示未婚人群
  • 代码示例:对data数据中的name进行自定义数据填充
data['name'].fillna('no_name')
# 结果如下
0        Bob
1       Mary
2      Peter
3    no_name
4       Lucy

六、Pandas插值填充

  • 适用数据类型:数值类型
  • 适用场景:数据列的含义较为复杂,需要更精确的填充方法时
  • 举例:对所有带有nan的数值列dataframe进行填充
  • 说明:pandas中进行空值填充的方法为interpolate(),该方法的本质是使用各种数学(统计学)中的插值方法进行填充,其中包含最近邻插值法、阶梯插值、线性插值、B样条曲线插值等多种方法。
  • 参数说明:interpolate()参数介绍
  • 代码示例:
data['score'].interpolate()
# 结果如下
0     99.0
1    100.0
2     95.5
3     91.0
4     95.0

七、机器学习算法填充

  • 适用数据类型:数值类型|字符类型
  • 适用场景:具有多种数据维度的场景
  • 说明:可以选择不同的回归|分类模型对数据进行填充
  • 注意:下面的例子中不考虑具体场景,只是用于举例
  • 数值类型数据填充代码示例(线性回归):
from sklearn.linear_model import LinearRegression

# 获取数据
data_train = data.iloc[[0, 1, 3]]

data_train_x = data_train[['age']]
data_train_y = data_train['score']
# 使用线性回归进行拟合
clf = LinearRegression()
clf.fit(data_train_x, data_train_y)
# 使用预测结果进行填充
data['score'].iloc[2] = clf.predict(pd.DataFrame(data[['age']].iloc[2]))

在这里插入图片描述

  • 字符类型数据填充代码示例(决策树):
from sklearn.tree import DecisionTreeClassifier

# 获取数据
data_train = data.iloc[[0, 1, 3]]

data_train_x = data_train[['age']]
data_train_y = data_train['class']
# 使用决策树进行拟合
clf = DecisionTreeClassifier()
clf.fit(data_train_x, data_train_y)
# 使用分类结果进行填充
data['class'].iloc[4] = clf.predict(pd.DataFrame(data[['age']].iloc[4]))[0]

在这里插入图片描述

相关文章
|
21天前
|
数据挖掘 数据处理 索引
Python数据分析面试:NumPy基础与应用
【4月更文挑战第16天】了解并熟练运用NumPy是衡量Python数据分析能力的关键。本文探讨了面试中常遇到的NumPy问题,包括数组创建、属性、索引切片、数组运算、统计函数以及重塑和拼接,并提供了相关代码示例。同时强调了易错点,如混淆Python列表与NumPy数组、误解广播规则等,提醒在数据处理中注意性能和内存效率。掌握这些知识点将有助于提升数据分析面试表现和技能。
32 5
|
5月前
|
算法 Java 程序员
火爆Boss直聘的2023最牛字节Java面试手册!助你狂拿千份offer!
当下程序员现状 根据一些调查报告,可以了解到当下程序员的现状。 首先,从年龄分布来看,年轻的程序员占据了主导地位。 30岁以下的开发者占比最高,为81%,而40岁以上的开发者仅占3%。 这意味着,程序员这个行业在一定程度上是年轻化的,同时也面临着一些中年转行或者技术更新换代的问题。 在性别方面,男性程序员的比例在90%以上,女性程序员的比例较低。 这可能和传统观念中将程序员视为男性职业有关。然而,随着技术的普及和女性对计算机科学的兴趣逐渐提高,女性程序员的比例也在逐渐增加。 从职业发展来看,程序员的职业发展相对较慢。 虽然程序员的薪资普遍较高,但是工作压力也很大,需要不断学习和更
93 0
|
29天前
|
数据采集 机器学习/深度学习 数据可视化
数据科学面试准备:解决Python数据分析常见问答和挑战
【4月更文挑战第12天】本文介绍了Python数据分析面试中常见的问题和挑战,涉及Pandas、NumPy、Matplotlib等库的基础知识,以及数据预处理、探索性分析、可视化、回归分析和分类分析的方法。例如,使用Pandas处理缺失值和异常值,利用Matplotlib和Seaborn进行数据可视化,通过Scikit-learn进行回归和分类模型的构建。
|
6月前
|
设计模式 Java 数据库
持续霸榜GitHub的面试神器:字节跳动Java面试参考手册,限时开源
最近又赶上跳槽的高峰期(招聘旺季),好多读者都问我有没有面试字节的神器,我苦苦寻到了一份内部资料《2023字节跳动Java面试参考手册(第二期)》。
|
4月前
|
算法 Java 程序员
阿里P8大佬终于把春招面试必备的神级Java面试手册给开源了!
先说说Java Java 作为国人编程开发语言中的 NO.1,已经占比半壁江山,选择入行做 IT 做编程开发的人,基本都把它作为首选语言,进大厂拿高薪也是大多数小伙伴们的梦想。 以前Java 岗位人才的空缺,而需求量又大,所以这种人才供不应求的现状,就是 Java 工程师的薪资待遇相对优厚的原因所在。 但是随着这个从事行业的人数逐渐增多,行业竞争也越来越大,招聘的企业和程序员们都想招聘到自己需要的人才/找到自己理想的岗位,国内大厂尤其是阿里招聘Java岗位居多,导致现在 Java 面试越来越难,内卷早就是大势所趋,万物皆可卷,卷的我们都见怪不怪了。 那么,阿里Java面试难度大吗?
|
4月前
|
开发框架 算法 Java
28天读完349页,这份阿里面试通关手册,助我闯进字节跳动
今年的面试比往年要难得多,各个互联网企业对于Java岗位的要求越来越多,也越来越高,主要是初级岗位已经趋近饱和,但高级岗位又相对来说缺乏,这类的人才偏少,因此作为Java开发人员,我们应该思考的是怎么去往高级人才发展,而不是转学其他语言,要懂得去成为金字塔顶端的人,而不是逃避一直做基层的人。
|
5月前
|
算法 网络协议 Java
备战春招狂刷这份大厂级24W字java面试手册2个月可成功逆袭上岸!
前言 2023年金九银十程序员跳槽或者找工作并不理想,迟迟找不到工作,甚至大厂还进行几轮裁员,导致整个就业市场都不是太好! 出现这种情况是因为中美贸易战,导致大环境不好、大厂裁员、就业情况差、企业要求变高、各行各业越来越卷,尤其是程序员,处于这个阶段,感觉特别明显! 对于程序员这个群体来说,java程序员的占比就非常之高,就业市场等于说是千军万马过独木桥,简直可以说是太难了!卷不过、根本卷不过! 在这里想说的是,大环境已经这样了,我们已经也无法左右这个市场,根本没有选择的余地,所以,打不过就加入,努力的提升自己能技术能力,直接吊打面试官! 这不,就迎来了大厂级24W字java面试手册!
|
5月前
|
NoSQL Java Redis
阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星31K+
互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这套1000+道的Java面试手册我整理了整整1个月,上传到Git上目前star数达到了30K+
|
5月前
|
SQL 负载均衡 安全
硬核!啃完410页java面试手册,三面阿里巴巴,5月成功入职研发部
面试前我主要是在牛客网看大家的面经进行查漏补缺,所以面试完后也想记录下来,权当给大家提供点信息吧。
|
5月前
|
Dubbo NoSQL Java
炸裂!阿里内部10W字面试手册,竟在GitHub访问量破百万
所谓 “金三银四”,是找工作的最佳季节。跳槽,你动心了吗? 年后返工往往伴随着离职大潮,相信有不少程序员朋友都想在金三银四这个招聘黄金期里找到一份更加心仪的工作。优秀的面试技巧往往能让大家事半功倍,了解面试题、良好的简历和提问套路,也是面试者突围而出的关键。还有时间,建议耐心读完全文,充分准备去拿到你的Dream Offer。