机器学习预处理-表格数据的空值处理

机器学习预处理-表格数据的空值处理

机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的python可视化,可视化能够帮助我们了解数据的构成和分布,是我们进行机器学习的必备步骤。上文中也提及,原始的数据存在部分的缺失,需要进行数据的空值处理,下面进行介绍。

PY工程下载:机器学习预处理-表格数据的空值处理-py工程

目录

  • 机器学习预处理-表格数据的空值处理
      • 0、原始数据集空缺信息查看
      • 1、删除空值所在行
      • 2、删除空值所在列
      • 3、使用中位数、均值进行填补
      • 4、使用k-means算法进行补充

0、原始数据集空缺信息查看

使用下面代码进行数据集的加载,并查看数据集的描述信息:

import pandas as pd
import osHOUSING_PATH = os.path.join("datasets", "housing")  # 存储位置def load_housing_data(housing_path=HOUSING_PATH):csv_path = os.path.join(housing_path, "housing.csv")return pd.read_csv(csv_path)  # 返回 包含所有数据的pandas DataFrame对象housing = load_housing_data()
housing.info()#查看数据集属性描述

在这里插入图片描述

1、删除空值所在行

下面代码能够删除空值所在行,只要有空值,这一行都会被删除:

housing_drop_row = housing.dropna()  # 删除包含空值的行
housing_drop_row.info()  # 查看数据集属性描述
output_path = os.path.join(HOUSING_PATH, "housing_drop_row.csv")  # 定义保存清理后数据的路径和文件名
housing_drop_row.to_csv(output_path, index=False)  # index=False 表示不保存行索引,将清理后的数据保存到新的 CSV 文件中

删除后的无空值数据如下所示:
在这里插入图片描述

2、删除空值所在列

下面代码能够删除空值所在列,只要有空值,这一列都会被删除(从上面截图看一共有9列,删除之后变成了8列):

housing_drop_column = housing.dropna(axis=1)  # axis=1 表示按列操作
housing_drop_column.info()  # 查看数据集属性描述
output_path = os.path.join(HOUSING_PATH, "housing_drop_column.csv")  # 定义保存清理后数据的路径和文件名
housing_drop_column.to_csv(output_path, index=False)  # index=False 表示不保存行索引,将清理后的数据保存到新的 CSV 文件中

在这里插入图片描述

3、使用中位数、均值进行填补

# 遍历DataFrame的每一列,用该列的中位数填补空值
housing_fill_median = housing.copy()
for column in housing_fill_median.columns:# 跳过非数值列,因为中位数仅适用于数值数据if housing_fill_median[column].dtype in ['int64', 'float64']:# fill_value = housing_fill_median[column].median()  # 计算中位数fill_value = housing_fill_median[column].mean()  # 计算均值housing_fill_median[column] = housing_fill_median[column].fillna(fill_value)  # 直接赋值
housing_fill_median.info()
output_path = os.path.join(HOUSING_PATH, "housing_fill_median.csv")  # 定义保存清理后数据的路径和文件名
housing_fill_median.to_csv(output_path, index=False)  # index=False 表示不保存行索引,将清理后的数据保存到新的 CSV 文件中

其中,修改下面代码的注释切换使用中位数、均值进行填充:

# fill_value = housing_fill_median[column].median()  # 计算中位数
fill_value = housing_fill_median[column].mean()  # 计算均值

在这里插入图片描述

4、使用k-means算法进行补充

这是一种高级的方式,使用k-means对空值进行填充,如果部分数据是字符串的,则先对其进行编码后在进行K-Means 聚类处理

# 使用 K-Means 填充空值
# 定义填补函数
def fill_missing_with_kmeans(df, n_clusters=5):df = df.copy()label_encoders = {}# 对非数值型特征进行编码for column in df.select_dtypes(exclude=[np.number]).columns:le = LabelEncoder()# 注意空值先暂时填充为一个特殊字符 '<missing>',避免 LabelEncoder 出错df[column] = df[column].fillna('<missing>')df[column] = le.fit_transform(df[column])label_encoders[column] = le# 找到含有空值的列missing_columns = df.columns[df.isnull().any()]# 针对每一列进行填补for column in missing_columns:# 提取当前列非空的数据用于聚类non_missing_data = df.loc[df[column].notnull(), :]missing_data = df.loc[df[column].isnull(), :]# 如果整列为空,直接跳过if non_missing_data.empty:continue# 使用 K-Means 聚类kmeans = KMeans(n_clusters=n_clusters, random_state=42)cluster_features = non_missing_data.drop(columns=[column])kmeans.fit(cluster_features)# 将每个非空数据点分配到一个簇,并计算簇中心的均值cluster_labels = kmeans.labels_for cluster_idx in range(n_clusters):# 当前簇的数据cluster_data = non_missing_data.loc[cluster_labels == cluster_idx]if column in df.select_dtypes(include=[np.number]).columns:# 如果是数值型特征,用簇中心的均值填充cluster_mean = cluster_data[column].mean()else:# 如果是编码后的字符串特征,用簇中最频繁的值填充cluster_mean = cluster_data[column].mode().iloc[0]# 填充缺失数据中属于该簇的值cluster_missing_data = missing_data[kmeans.predict(missing_data.drop(columns=[column])) == cluster_idx]df.loc[cluster_missing_data.index, column] = cluster_mean# 反编码字符串特征for column, le in label_encoders.items():df[column] = le.inverse_transform(df[column].astype(int))return df# 填充数据中的缺失值
housing_fill_kmeans = fill_missing_with_kmeans(housing)
housing_fill_kmeans.info()
output_path = os.path.join(HOUSING_PATH, "housing_fill_kmeans.csv")  # 定义保存清理后数据的路径和文件名
housing_fill_kmeans.to_csv(output_path, index=False)  # index=False 表示不保存行索引,将清理后的数据保存到新的 CSV 文件中

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解 SpringMVC 请求流程

文章目录 1. Spring 基础 - SpringMVC 请求流程1.1 引入1.2 什么是 MVC1.3 什么是 Spring MVC1.4 请求流程核心架构的具体流程步骤补充 1.5 案例**Maven 包引入****业务代码的编写**DaoServiceControllerwebapp 下的 web.xmlspringmvc.xmlJSP 视图 2. Spring 进阶 - Dispatcher…

【mysql】如何解决主从架构从库延迟问题

目录 1. 说明2.优化主库的写入性能3. 优化网络性能4. 增强从库的硬件性能5. 调整从库的配置6. 主从架构优化7. 监控和调优8.使用 GTID 和 Group Replication 1. 说明 1.在 MySQL 数据库中&#xff0c;从库延迟&#xff08;replication lag&#xff09;是指主库和从库之间的数据…

Springboot3.x配置类(Configuration)和单元测试

配置类在Spring Boot框架中扮演着关键角色&#xff0c;它使开发者能够利用Java代码定义Bean、设定属性及调整其他Spring相关设置&#xff0c;取代了早期版本中依赖的XML配置文件。 集中化管理&#xff1a;借助Configuration注解&#xff0c;Spring Boot让用户能在一个或几个配…

鸿道Intewell-C纯实时构型,适合有功能安全认证需求的工业操作系统

鸿道Intewell-C纯实时构型&#xff0c;适合有功能安全认证需求的工业操作系统 鸿道Intewell-C是一款工业实时微内核操作系统&#xff0c;由科东软件自主研发&#xff0c;具有超低延迟和最小抖动&#xff0c;保障工业设备可以高效处理时间敏感的现场业务&#xff0c;支持多种工…

Stream– ESP8266物联网应用,(客户端向服务器发送数据信息 客户端向服务器请求数据信息)

Stream– ESP8266物联网应用 Stream对于ESP8266-Arduino语言来说指的是数据序列。请留意&#xff1a;在C编程中Stream常被翻译作“流”。我们认为将Stream称为数据序列更加直观。因为数据序列这一概念有两个很关键特点。 第一个特点是“序”&#xff0c;即数据序列不能是杂乱…

提升PHP技能:18个实用高级特性

掌握PHP基础知识只是第一步。 深入了解这18个强大的PHP特性&#xff0c;将显著提升您的开发效率和代码质量。 1、超越 __construct() 的魔法方法 虽然 __construct() 为大多数开发者所熟知&#xff0c;PHP 却提供了更多强大的魔术方法&#xff0c;例如&#xff1a; class Da…

Spring MVC 请求头中 ContentType和DataType区别

一、Spring MVC 请求头中ContentType和DataType区别用途 1. dataType【通常在JQuery中使用】 定义&#xff1a;dataType 通常用于描述前端希望从服务器接收的数据格式。常见场景&#xff1a;这是前端参数&#xff0c;通常在 jQuery.ajax 或其他前端框架中使用&#xff0c;告诉…

Vue 3 中的 `update:modelValue` 事件详解

在 Vue 3 中&#xff0c;update:modelValue​ 事件通常与 v-model​ 指令一起使用&#xff0c;以实现自定义组件的双向数据绑定。以下是对该事件的详细分析&#xff1a; 事件定义 首先&#xff0c;我们需要在组件中定义 update:modelValue​ 事件。可以使用 defineEmits​ 函…

芯品荟|SWM221系列芯片之TFTLCD彩屏显示及控制

“革新未来&#xff0c;智驭控制新纪元”&#xff0c;由广东华芯微特集成电路有限公司市场总监张琢&#xff0c;对SWM221系列的强大功能表现进行了整体介绍。 确实&#xff0c;华芯微特在TFTLCD显示及控制有十多年应用基础和积累的团队&#xff0c;仍勇于挑战&#xff0c;自我…

MIT S6081 2024 Lab 1 | Operating System | Notes

目录 安装与下载 实验1 开始我们的实验 sleep&#xff08;简单&#xff09; pingpong&#xff08;简单&#xff09; primes (中等)/(困难) find&#xff08;中等&#xff09; xargs&#xff08;中等&#xff09; finally Reference I. Tools Debian 或 Ubuntu Arch…

华为认证HCIA——数据传输形式,数据封装的基本概念

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup!!! 对网络概念有基本理解后&#xff08;华为认证HCIA——网络基本概念&#xff09;&#xff0c;开始进一步学习数据传输。 数据传输的形式 数据传输主要有三种形式&#xff1a; 1&#xff0c;电路传…

opencv小练习(未完成版)

读取一张彩色图像并将其转换为灰度图。 import cv2# 读取图片 img cv2.imread("./duck.png") img cv2.resize(img, dsizeNone, fx0.4, fy0.4, interpolationcv2.INTER_LINEAR) # 读取一张灰度图 img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 展示图片 cv2.im…

WSL (Windows Subsystem for Linux)

文章目录 Windows下使用Linux的三种方式&#xff1a;1.WSL(1)安装WSL(2)初始化Linux系统(3)安装、创建、激活 Python虚拟环境 2.虚拟机3.Docker Windows下使用Linux的三种方式&#xff1a; 1.WSL 是最简单的在 Windows 上运行 Linux 环境的方式&#xff0c;适用于日常开发和命…

搭建分布式HBase集群

title: 搭建分布式HBase集群 date: 2024-11-28 23:27:00 categories: - 服务器 tags: - HBase - 大数据搭建分布式HBase集群 本次实验环境&#xff1a;Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeeper-3.6.3、Hbase-2.4.11 功能规划 MasterSlave1Slave2主节点从节点从节点H…

金融分析-Transformer模型(基础理论)

Transformer模型 1.基本原理 transformer的core是注意力机制&#xff0c;其本质就是编码器-解码器。他可以通过多个编码器进行编码&#xff0c;再把编码完的结果输出给解码器进行解码&#xff0c;然后得到最终的output。 1.1编码器 数据在编码器中会经过一个self-attention的…

【一本通】两个数的最小公倍数

【一本通】两个数的最小公倍数 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入两个正整数&#xff0c;编程计算两个数的最小公倍数。 输入 两个整数 输出 最小公倍数 样例输入 12 18样例输出 …

理解音频采样率和transformer模型:给Python小白的简单解释

理解音频采样率和transformer模型&#xff1a;给Python小白的简单解释 引言什么是采样率&#xff1f;举个例子有趣的现象Python小实验总结 引言 大家好&#xff01;今天我们来聊一个有趣的话题&#xff1a;音频采样率和AI模型。不要被这些专业术语吓到&#xff0c;我会用最简单…

D 咖智能饮品机器人:开启商业新篇

在科技迅猛发展的当下&#xff0c;智能机器人正逐步渗透到各个商业领域&#xff0c;D 咖智能饮品机器人便是其中的佼佼者&#xff0c;它的出现为饮品行业带来全新的发展契机&#xff0c;有望开启商业新篇。 从大环境来看&#xff0c;消费者对于饮品的需求日益多元化和个性化。他…

35. Three.js案例-创建带阴影的球体与平面

35. Three.js案例-创建带阴影的球体与平面 实现效果 知识点 WebGLRenderer WebGLRenderer 是Three.js中用于渲染场景的主要类之一&#xff0c;它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters : Object) 参数类型描述parametersObject可选…

Python:利用蒙特卡洛方法求解圆周率

1. 蒙特卡洛方法概述 蒙特卡洛方法是一种以概率统计理论为指导的数值计算方法。它通过随机抽样来求解问题&#xff0c;在许多复杂的数学、物理等领域都有广泛的应用。其基本思想是利用随机数来模拟实验&#xff0c;通过大量重复的实验得到近似的结果。 2. 利用蒙特卡洛方法求…