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

相关文章:
机器学习预处理-表格数据的空值处理
机器学习预处理-表格数据的空值处理 机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的python可视化,可视化能够帮助我们了解数据的构成和分布,是我们进行机器学习的必备步骤。上文中也提及,原始的数据存在部分的缺失࿰…...
数据结构_平衡二叉树
结点类 构造函数分为有参和无参,相同点都是初始化树高为1 class Node { public:int data; // 用于输出int val; // 数据域,用于排序int height; // 树高Node* left;Node* right;Node();Node(int v, int d);static int max(int a, int b); };Node::N…...
C++对象的赋值与复制复制构造函数(指针数据成员)
一、对象的赋值 同类对象之间可以相互赋值,对象赋值的一般形式:对象名2 对象名1; 原理是,赋值运算符的重载。仅赋值,因此赋值前,需要先定义并初始化对象2。 对象的赋值针对指对象中所有数据成员的值; 对…...
Coding Caprice - monotonic stack2
42. 接雨水 class Solution { public:int trap(vector<int>& height) {stack<int> sh;int out 0;for(int i0; i<height.size(); i){while(!sh.empty() && height[sh.top()]<height[i]){int bo height[sh.top()];sh.pop();if(sh.empty()){brea…...
Spring Mvc面试题(常见)
1 Spring MVC的执行流程 用户发起请求,请求先被Servlet拦截以后,转发给SpringMVC框架SpringMVC 里面的DispatcherServlet(核心控制器) 接收到请求,并转发给HandlerMappingHandlerMapping负责解析请求,根据请求信息和配置信息找到匹配的Controller类(当这里有配置拦截器,会…...
opencv # Sobel算子、Laplacian算子、Canny边缘检测、findContours、drawContours绘制轮廓、外接矩形
一、Sobel算子 案例图片 cv2.Sobel(src, ddepth, dx, dy, ksize3, scale1, delta0, borderTypeNone) 功能:用于计算图像梯度(gradient)的函数 参数: src: 输入图像,它应该是灰度图像。 ddepth: 输出图像的所需深度&am…...
Neo4j插入数据逐级提升速度4倍又4倍
语雀版:https://www.yuque.com/xw76/back/dtukgqfkfwg1d6yo 目录 背景介绍初始方案Node()创建事务批量提交记录Node是否存在生成Cypher语句执行数据库参数优化切换成85k个三元组测试建索引(很显著!!!)MATCH…...
C++特殊类设计(单例模式等)
目录 引言 1.请设计一个类,不能被拷贝 2. 请设计一个类,只能在堆上创建对象 为什么设置实例的方法为静态成员呢 3. 请设计一个类,只能在栈上创建对象 4. 请设计一个类,不能被继承 5. 请设计一个类,只能创建一个对…...
J8学习打卡笔记
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 Inception v1算法实战与解析 导入数据数据预处理划分数据集搭建模型训练模型正式训练结果可视化详细网络结构图个人总结 import os, PIL, random, pathlib imp…...
前端学习-操作元素内容(二十二)
目录 前言 目标 对象.innerText 属性 对象.innerHTML属性 案例 年会抽奖 需求 方法一 方法二 总结 前言 曾经沧海难为水,除却巫山不是云。 目标 能够修改元素的文本更换内容 DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象,…...
【踩坑】pip离线+在线在虚拟环境中安装指定版本cudnn攻略
pip离线在线在虚拟环境中安装指定版本cudnn攻略 在线安装离线安装Windows环境:Linux环境: 清华源官方帮助文档 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 标题的离线的意思是先下载whl文件再安装到虚拟环境,在线的意思是直接在当前虚…...
golang操作sqlite3加速本地结构化数据查询
目录 摘要Sqlite3SQLite 命令SQLite 语法SQLite 数据类型列亲和类型——优先选择机制 SQLite 创建数据库SQLite 附加数据库SQLite 分离数据库 SQLite 创建表SQLite 删除表 SQLite Insert 语句SQLite Select 语句SQLite 运算符SQLite 算术运算符SQLite 比较运算符SQLite 逻辑运算…...
vllm加速(以Qwen2.5-7B-instruction为例)与流式响应
1. vllm介绍 什么是vllm? vLLM 是一个高性能的大型语言模型推理引擎,采用创新的内存管理和执行架构,显著提升了大模型推理的速度和效率。它支持高度并发的请求处理,能够同时服务数千名用户,并且兼容多种深度学习框架,…...
WordPress弹窗公告插件-ts小陈
使用效果 使用后网站所有页面弹出窗口 插件特色功能 设置弹窗公告样式:这款插件可展示弹窗样式公告,用户点击完之后不再弹出,不会频繁打扰用户。可设置弹窗中间的logo图:这款插件针对公告图片进行独立设置,你可以在设…...
【ELK】容器化部署Elasticsearch1.14.3集群【亲测可用】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. 部署1.1 单节点1.2 新节点加入集群1.3 docker-compose部署集群 1. 部署 按照官网流程进行部署 使用 Docker 安装 Elasticsearch |Elasticsearch 指南 [8.14] |…...
[SAP ABAP] ALV状态栏GUI STATUS的快速创建
使用事务码SE38进入到指定程序,点击"显示对象列表"按钮 鼠标右键,选择"GUI状态" 弹出【创建状态】窗口,填写状态以及短文本描述以后,点击按钮 点击"调整模板",复制已有程序的状态栏 填…...
【Linux】NET9运行时移植到低版本GLIBC的Linux纯内核板卡上
背景介绍 自制了一块Linux板卡(基于全志T113i) 厂家给的SDK和根文件系统能够提供的GLIBC的版本比较低 V2.25/GCC 7.3.1 这个版本是无法运行dotnet以及dotnet生成的AOT应用的 我用另一块同Cortex-A7的板子运行dotnet的报错 版本不够,运行不了 而我的板子是根本就识…...
深入浅出支持向量机(SVM)
1. 引言 支持向量机(SVM, Support Vector Machine)是一种常见的监督学习算法,广泛应用于分类、回归和异常检测等任务。自1990年代初期由Vapnik等人提出以来,SVM已成为机器学习领域的核心方法之一,尤其在模式识别、文本…...
Vue脚手架相关记录
脚手架 安装与配置 安装node node -> 16.20.2 切换淘宝镜像 npm install -g cnpm -registryhttp://registry.npm.taobao.orgnpm config set registry http://registry.npm.taobao.org/使用了第二个,下一步才有用 安装vue npm install -g vue/clivscode中不给运行vue解…...
基于Docker的Minio分布式集群实践
目录 1. 说明 2. 配置表 3. 步骤 3.1 放行服务端口 3.2 docker-compose 编排 4. 入口反向代理与负载均衡配置 4.1 api入口 4.2 管理入口 5. 用例 6. 参考 1. 说明 以多节点的Docker容器方式实现minio存储集群,并配以nginx反向代理及负载均衡作为访问入口。…...
仅限菲律宾本地团队使用的ElevenLabs隐藏功能:Tagalog重音标记语法(`[ˈba.ka]`)、连读规则注入与敬语语调开关(内测白名单已开放)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs菲律宾文语音能力的本地化演进背景 菲律宾语(Filipino)作为以他加禄语(Tagalog)为基础的国家官方语言,拥有约1.05亿母语及第二语言…...
终极ThinkPad风扇控制指南:告别噪音,拥抱静音高效
终极ThinkPad风扇控制指南:告别噪音,拥抱静音高效 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾经因为ThinkPad风扇的"直升机起…...
如何在Windows 11上让经典游戏重获新生:DDrawCompat兼容性解决方案详解
如何在Windows 11上让经典游戏重获新生:DDrawCompat兼容性解决方案详解 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_m…...
ARM Debug Interface v5.1架构解析与调试实践
1. ARM Debug Interface v5.1架构深度解析1.1 调试接口技术演进与核心价值ARM调试接口(ADI)技术历经多次迭代,v5.1版本作为当前主流标准,在嵌入式系统调试领域确立了关键地位。调试接口本质上是处理器核与外部调试工具之间的标准化通信桥梁,其…...
机械臂时间冲击最优轨迹规划【附代码】
✨ 长期致力于串联机械臂、时间-冲击最优、轨迹规划、多目标粒子群算法、非支配排序遗传算法研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)构建基于…...
量化部署终极指南:从GPTQ到AWQ,精度损失与显存节省的平衡艺术
系列导读 你现在看到的是《本地大模型私有化部署与优化:从入门到生产级实战》的第 7/10 篇,当前这篇会重点解决:帮你搞懂每种量化方法的优劣,用最少显存跑最大模型,精度损失可控。 上一篇回顾:第 6 篇《RAG知识库实战:LangChain+Chroma搭建本地问答系统,解决幻觉与知…...
从单体智能到组织智能:AgentOrg多智能体系统架构与实战
1. 项目概述:从单体智能到组织智能的范式跃迁最近在AI Agent领域,一个名为“AgentOrg”的开源项目引起了我的注意。这个由Angelopvtac发起的项目,其核心思想非常吸引人:它不再将AI Agent视为一个孤立的、执行单一任务的智能体&…...
DOM 浏览器
DOM 浏览器 引言 DOM(文档对象模型)是浏览器中处理HTML和XML文档的标准方式。它允许开发人员通过编程方式访问和操作网页内容。本文将详细介绍DOM的概念、其在浏览器中的运用以及相关的编程技巧。 DOM简介 什么是DOM? DOM(Document Object Model)是一种跨平台和语言独…...
Linux内核C11升级:从C89到现代C语言的演进与挑战
1. 项目概述:一次内核语言的“心脏移植”手术最近Linux内核社区放出了一个重磅消息,未来计划将内核的C语言标准从使用了二十多年的C89/C90,升级到C11。这个消息一出,在开发者圈子里激起的讨论,不亚于当年从Python 2迁移…...
MIMO-OFDM在ISAC系统中的同步技术与性能优化
1. MIMO-OFDM技术在ISAC系统中的核心价值 毫米波频段下的集成感知与通信(ISAC)系统正成为6G网络的关键使能技术。作为其物理层核心,MIMO-OFDM架构通过正交子载波和空间复用技术,同时实现了高速数据传输与高精度环境感知。这种双功能集成并非简单叠加&…...
