面经|缺失值填补的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

目录
打赏
0
0
0
0
16
分享
相关文章
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
68 6
实战指南:通过1688开放平台API获取商品详情数据(附Python代码及避坑指南)
1688作为国内最大的B2B供应链平台,其API为企业提供合法合规的JSON数据源,直接获取批发价、SKU库存等核心数据。相比爬虫方案,官方API避免了反爬严格、数据缺失和法律风险等问题。企业接入1688商品API需完成资质认证、创建应用、签名机制解析及调用接口四步。应用场景包括智能采购系统、供应商评估模型和跨境选品分析。提供高频问题解决方案及安全合规实践,确保数据安全与合法使用。立即访问1688开放平台,解锁B2B数据宝藏!
【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
本文介绍如何使用Python SDK为中国区微软云(China Azure)中的虚拟机磁盘创建快照。通过Azure Python SDK的Snapshot Class,指定`location`和`creation_data`参数,使用`Copy`选项从现有磁盘创建快照。代码示例展示了如何配置Default Azure Credential,并设置特定于中国区Azure的`base_url`和`credential_scopes`。参考资料包括官方文档和相关API说明。
|
2月前
|
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
87 5
Python高性能编程:五种核心优化技术的原理与Python代码
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
98 21
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
52 10
|
3月前
|
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
89 33
Python中使用MySQL模糊查询的方法
本文介绍了两种使用Python进行MySQL模糊查询的方法:一是使用`pymysql`库,二是使用`mysql-connector-python`库。通过这两种方法,可以连接MySQL数据库并执行模糊查询。具体步骤包括安装库、配置数据库连接参数、编写SQL查询语句以及处理查询结果。文中详细展示了代码示例,并提供了注意事项,如替换数据库连接信息、正确使用通配符和关闭数据库连接等。确保在实际应用中注意SQL注入风险,使用参数化查询以保障安全性。
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
61 10

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等