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

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

机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的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…

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;即数据序列不能是杂乱…

芯品荟|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;适用于日常开发和命…

金融分析-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样例输出 …

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

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

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

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

leetcode212. 单词搜索 II

给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一…

容器化技术

文章目录 虚拟化容器容器隔离实现隔离文件 chroot隔离访问 namespace隔离资源 cgroups Dockerkubernetes 虚拟化容器 容器的首要目标是让软件分发部署过程从传统的发布安装包、靠人工部署转变为直接发布已经部署好的、包含整套运行环境的虚拟计划镜像。 一个计算机软件能够给正…

【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析

目录 一、前言 二、Spring Boot 简介 三、Spring Boot 核心模块 四、Spring Boot 项目实战&#xff1a;构建一个简单的 RESTful API 1. 创建 Spring Boot 项目 2. 配置数据库 3. 创建实体类 4. 创建 JPA 仓库接口 5. 创建服务层 6. 创建控制器层 7. 测试 API 8. 运…

土地档案管理关系[源码+文档]

目录 摘 要 Abstract 1 绪论 1.1 可行性研究编写目的 1.2 项目背景 1.3 土地管理现状 1.4 土地档案管理研究方向 1.5 项目目标 1.6 项目设计原则 1.6.1 实用性原则 1.6.2 经济性原则 1.6.3 合法性原则 2 相关技术介绍 2.1 三层架构的选择 2.2 编程…

使用C语言编写UDP循环接收并打印消息的程序

使用C语言编写UDP循环接收并打印消息的程序 前提条件程序概述伪代码C语言实现编译和运行C改进之自由设定端口注意事项在本文中,我们将展示如何使用C语言编写一个简单的UDP服务器程序,该程序将循环接收来自指定端口的UDP消息,并将接收到的消息打印到控制台。我们将使用POSIX套…

Audiocraft智能音频和音乐生成工具部署及使用

1、概述 Facebook开源了一款名为AudioCraft的AI音频和音乐生成工具。 该工具可以直接从文本描述和参考音乐生成高质量的音频和音乐。AudioCraft包含MusicGen、AudioGen和EnCodec三个模型&#xff0c;分别实现音乐生成、音频生成和自定义音频模型构建。 2、项目地址 https://…

vulnhub靶场【DriftingBlues】之7

前言 靶机&#xff1a;DriftingBlues-6&#xff0c;IP地址192.168.1.65 攻击&#xff1a;kali&#xff0c;IP地址192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24 信息收集 使用nmap扫描端口 SSH服务&…