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

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

示例数据

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

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]
})

image.png

一、均值填充

适用数据类型:数值类型

适用场景:数据整体极值差异不大时

举例:对成年男性身高的缺失值进行填充

代码示例:对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]))

image.png

字符类型数据填充代码示例(决策树):

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]

image.png

相关文章
|
5天前
|
并行计算 C语言 开发者
优化Python代码的五大技巧
Python作为一种流行的编程语言,在各种应用场景中广泛使用。然而,随着项目规模的增长和需求的变化,Python代码的性能和可维护性也成为了关键问题。本文将介绍优化Python代码的五大技巧,帮助开发者提升代码效率和质量。
|
13天前
|
Python
python魔法方法如何应用
【4月更文挑战第12天】这个Python示例展示了类继承和方法重写。`Student`类继承自`Person`,并覆盖了`say_hello`方法。通过`super().__init__(name)`调用父类的`__init__`初始化`name`属性,`Student`添加了`age`属性,并在重写的`say_hello`中使用。创建`Student`实例`student`并调用其`say_hello`,输出定制的问候信息。
19 1
|
1天前
|
人工智能 Python
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
15 0
|
2天前
|
数据安全/隐私保护 Python
Python中的装饰器:提升代码可读性和灵活性
Python中的装饰器是一种强大的编程工具,能够提升代码的可读性和灵活性。本文将深入探讨装饰器的原理和用法,以及如何利用装饰器来简化代码、实现日志记录、权限控制等功能,从而让你的Python代码更加优雅和高效。
|
4天前
|
Python
如何使用Python的Pandas库进行数据缺失值处理?
Pandas在Python中提供多种处理缺失值的方法:1) 使用`isnull()`检查;2) `dropna()`删除含缺失值的行或列;3) `fillna()`用常数、前后值填充;4) `interpolate()`进行插值填充。根据需求选择合适的方法处理数据缺失。
35 9
|
6天前
|
存储 关系型数据库 MySQL
Python搭建代理IP池实现存储IP的方法
Python搭建代理IP池实现存储IP的方法
|
6天前
|
Python
Python动态IP代理防止被封的方法
Python动态IP代理防止被封的方法
|
6天前
|
数据采集 存储 安全
python检测代理ip是否可用的方法
python检测代理ip是否可用的方法
|
8天前
|
数据安全/隐私保护 Python
Python中的装饰器:提升代码可读性与灵活性
Python中的装饰器是一种强大的工具,可以在不改变函数原有逻辑的情况下,为函数添加额外的功能。本文将介绍装饰器的基本概念和用法,并通过实例演示如何利用装饰器提升代码的可读性和灵活性,使代码更加简洁、易于维护。
|
8天前
|
BI 开发者 数据格式
Python代码填充数据到word模板中
【4月更文挑战第16天】

热门文章

最新文章