面经|缺失值填补的7种方法(使用场景+Python代码)

本文详细介绍了数据挖掘中处理缺失值的七种方法,包括均值、中位数、众数填充,前后数据填充,自定义数据填充,Pandas插值以及机器学习算法填充。这些方法适用于不同数据类型和场景,例如数值类型和字符类型数据,以及具有前后关系的数据。对于数值类型数据,可以选择线性回归等机器学习模型进行预测填充;而对于字符类型数据,如城市信息,可使用众数填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新专栏《数据挖掘(分析)面经》
第一篇:缺失值处理方法

对于从事数据相关工作的小伙伴,面试的时候经常会被问到如何进行缺失值/异常值的处理,本文来梳理一下填补缺失值的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]

在这里插入图片描述

### Python 试常见问题及经验分享 #### 一、Python 库的重要性 在 Python 的技术试中,掌握常用库是非常重要的。例如 `numpy` 和 `pandas` 是数据处理的核心工具;`matplotlib` 可用于可视化分析;而机器学习领域则离不开 `scikit-learn` 等框架[^1]。 以下是几个常见的基础问题及其扩展: --- #### 二、基础知识回顾 对于初学者来说,Q.4 至 Q.20 这些范围内的题目通常是考察基本语法和核心概念的关键部分。即使是资深开发者也应定期复习这些内容以巩固理解[^2]。 以下是一些典型的基础问题示例: 1. **什么是列表解析?** 列表解析是一种简洁的方式创建新列表。它允许在一个表达式内部定义循环逻辑并过滤条件。 ```python squares = [x**2 for x in range(10)] ``` 2. **如何判断对象是否可迭代?** 使用内置函数 `isinstance()` 结合抽象基类 `collections.abc.Iterable` 来验证。 ```python from collections.abc import Iterable obj = [1, 2, 3] is_iterable = isinstance(obj, Iterable) ``` 3. **解释装饰器的作用以及实现原理。** 装饰器本质上是一个接受函数作为参数的高阶函数,并返回一个新的替换版本或增强功能后的原函数副本。 ```python def my_decorator(func): def wrapper(): print("Something before the function call.") func() print("Something after the function call.") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello() ``` --- #### 三、实战技巧与案例准备 针对更高级别的岗位需求,除了理论知识外还需要具备解决实际业务场景的能力。因此建议多做练习项目积累经验[^4]。 另外值得注意的是,在对 BATJ (百度/阿里巴巴集团/腾讯控股有限公司/JD东)这样的顶级科技公司招聘时,可能会被询问更加深入的技术细节或者算法设计思路等问题[^3]。 --- #### 四、总结 通过以上介绍可以看出,无论是入门级还是专家级别职位都需要扎实的语言功底加上丰富的实践经验才能脱颖而出成为理想候选人之一 。持续不断地学习新技术保持竞争力尤为重要! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哥不像程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值