新手村:数据预处理-缺失值补充策略

server/2025/3/17 12:04:38/

新手村:数据预处理-缺失值补充策略

在这里插入图片描述

缺失值补充策略

策略描述适用场景优点缺点
删除含有缺失值的行或列删除包含任何缺失值的行或列。当缺失值比例较小且数据量较大时。简单直接,不会引入新的误差。可能导致数据丢失,特别是在缺失值较多的情况下。
用固定值填充使用一个特定值(如0、均值、中位数等)来填充缺失值。数据分布较为均匀,缺失值不是特别多时简单易行,适用于大多数情况。如果选择的固定值不合适,可能会引入偏差。
用插值法填充对于有序数据,使用插值法(如线性插值)来估计缺失值。时间序列数据或其他有序数据。能较好地保留数据的趋势和模式。对于非有序数据效果不佳。
用模型预测填充使用机器学习模型(如KNN、随机森林等)预测并填充缺失值。复杂数据集,缺失值较多且有较强的相关性时能够更准确地填充缺失值,特别是当数据之间存在复杂关系时。实现复杂,计算成本较高,需要更多的计算资源和时间。

示例代码与解释

删除含有缺失值的行或列
import pandas as pd
import numpy as np# 创建一个示例数据集
data = {'A': [1, 2, np.nan, 4, 5],'B': [np.nan, 2, 3, 4, 5],'C': [1, np.nan, np.nan, 4, 5]
}df = pd.DataFrame(data)# 删除含有缺失值的行
df_dropped_rows = df.dropna()
print("删除含有缺失值的行后的数据:")
print(df_dropped_rows)# 删除含有缺失值的列
df_dropped_columns = df.dropna(axis=1)
print("\n删除含有缺失值的列后的数据:")
print(df_dropped_columns)

在这里插入图片描述

用固定值填充
# 用均值填充缺失值
df_filled_mean = df.fillna(df.mean())
print("\n用均值填充缺失值后的数据:")
print(df_filled_mean)# 用中位数填充缺失值
df_filled_median = df.fillna(df.median())
print("\n用中位数填充缺失值后的数据:")
print(df_filled_median)# 用固定值(如0)填充缺失值
df_filled_zero = df.fillna(0)
print("\n用0填充缺失值后的数据:")
print(df_filled_zero)

在这里插入图片描述

用插值法填充
# 用线性插值法填充缺失值
df_interpolated = df.interpolate()
#df_interpolated = df.interpolate(axis=1)
print("\n用线性插值法填充缺失值后的数据:")
print(df_interpolated)

在这里插入图片描述

用模型预测填充
from sklearn.impute import KNNImputer# 使用KNN算法进行缺失值填充
imputer = KNNImputer(n_neighbors=2)
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print("\n用KNN算法填充缺失值后的数据:")
print(df_imputed)

在这里插入图片描述

总结

通过上述表格和示例代码,您可以更好地理解不同的缺失值补充策略及其应用场景。每种方法都有其特定的优点和局限性,选择合适的方法取决于数据的具体特性和分析需求:

  • 删除含有缺失值的行或列:适用于缺失值较少的情况,简单但可能导致数据丢失。
  • 用固定值填充:适用于大多数情况,但需谨慎选择填充值以避免引入偏差。
  • 用插值法填充:适用于有序数据,能较好地保留趋势。
  • 用模型预测填充:适用于复杂数据集,但实现复杂且计算成本较高

http://www.ppmy.cn/server/175692.html

相关文章

Java 并发编程——Java BIO NIO Socket编程

参考Java 并发编程——Java BIO NIO Socket编程 BIO:阻塞式编程模型 Socket 服务端编程Socket 客户端编程 NIO:非阻塞式编程模型 NIO 介绍Java 中 NIO 非阻塞式与前面 BIO 阻塞式的区别Java NIO类库包含以下三个核心组件ServerSocketChannel 服务端编程…

【ES6】模块化

概述 模块功能主要有两个命令,export和import。 一个js文件就是一个模块。 参考视频 【一小时速通JavaScript模块化,涵盖CommonJS与ES6模块化-哔哩哔哩】 https://b23.tv/gZ1uK7V 导出成员 在正常变量、函数前加export关键字。 导入模块 在另一个…

探索数据交互的奥秘:深入剖析缓冲区的工作原理与应用场景

目录 1.理解“一切皆文件” 2.缓冲区 2.1 什么是缓冲区 2.2 为什么要引⼊缓冲区机制 2.3 解释一个遗留问题 2.4 缓冲类型 2.5 FILE 3.简单设计⼀下libc库 1.理解“一切皆文件” ⾸先,在windows中是⽂件的东西,它们在linux中也是文件;其…

Linux系统移植篇(二)Uboot 顶层 Makefile 解析

在之前的文章,我们经过编译,配置工具链,编译好了uboot的内容,呈现的工程结构如下所示; 具体的内容作用也就不做过多的解析了,读者可以根据内容单个去查。 在阅读 uboot 源码之前,肯定是要先看一…

Carto 无尽旅图 for Mac v1.0.7.6 (51528)冒险解谜游戏 支持M、Intel芯片

游戏介绍 《Carto》源于英文"Cartographer"(制图师),卡朵不慎坠入未知世界。这里蜿蜒曲折,地形丰富。作为制图师卡朵,你将用你自己的神秘力量,操纵地图颠覆世界,将其翻转、拼合。当世…

JavaScript 中 call 和 apply 的用法与区别

文章目录 前言一、 call 方法1.1 基本用法1.2 传递多个参数 二、apply 方法2.1 基本用法2.2 传递数组参数 三、call 和 apply 的区别四、实际应用场景4.1 借用方法4.2 继承与构造函数 五、总结 前言 在 JavaScript 中,call 和 apply 是两个非常重要的函数方法&…

DeepSeek + Excel:数据处理专家 具体步骤

将DeepSeek与Excel结合使用,可显著提升数据处理效率,实现智能化的数据分析、清洗、计算及可视化。以下是具体操作步骤及核心技巧的综合指南: 一、接入DeepSeek的两种主要方法 1. 插件接入法(推荐) 步骤1:…

【Linux终端探幽】—基础指令集(中):迷宫寻宝

目录 rmdir与rm:清理迷宫的碎石与陷阱—— 扫除废弃路径的爆破术 man:迷宫探险的古老指南书—— 用咒语解锁指令的隐藏说明 cp:复制迷宫地图的影分身术—— 从一扇门到另一扇门的镜像魔法 mv:移动宝藏的隐形搬运工—— 路径重…