数据清洗(脚本)
使用脚本清洗数据时,可以根据具体的数据问题选择编程语言,如Shell、Python、SQL等。这里我以 Python(Pandas库) 和 SQL 为例,演示如何通过脚本进行数据清洗。
1. 使用 Python(Pandas库) 进行数据清洗
Python 的 pandas 库非常适合处理大规模数据清洗任务,以下是一些常见的数据清洗操作:
1.1 处理缺失值
python
复制代码
import pandas as pd # 读取数据(可以是CSV、Excel等格式) df = pd.read_csv('data.csv') # 查看缺失值 print(df.isnull().sum()) # 方法1: 删除包含缺失值的行 df_cleaned = df.dropna() # 方法2: 使用均值或其他方式填充缺失值 df['age'] = df['age'].fillna(df['age'].mean()) # 用均值填充年龄缺失值 df['city'] = df['city'].fillna('Unknown') # 用'Unknown'填充城市缺失值 # 保存清洗后的数据 df_cleaned.to_csv('cleaned_data.csv', index=False)
1.2 处理重复数据
python
复制代码
# 查看重复数据 print(df.duplicated()) # 删除重复行 df_cleaned = df.drop_duplicates() # 保留最新的数据行,删除重复的记录 df_cleaned = df.drop_duplicates(subset='customer_id', keep='last')
1.3 格式不一致的清洗
python
复制代码
# 将所有字符串字段转换为小写 df['name'] = df['name'].str.lower() # 日期格式统一转换 df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d') # 去除前后空格 df['address'] = df['address'].str.strip()
1.4 处理异常值
python
复制代码
# 查看统计信息以识别异常值 print(df.describe()) # 方法1: 删除明显的异常值,如年龄不可能为300 df_cleaned = df[(df['age'] > 0) & (df['age'] < 120)] # 方法2: 用中位数替换异常值 median_age = df['age'].median() df['age'] = df['age'].apply(lambda x: median_age if x > 120 else x) # 方法3: 标记异常值,不删除 df['age_outlier'] = df['age'].apply(lambda x: 1 if x > 120 else 0)
1.5 数据格式转换
python
复制代码
# 将货币格式转换为数值 df['price'] = df['price'].replace({'\$': '', ',': ''}, regex=True).astype(float)
2. 使用 SQL 进行数据清洗
SQL适用于在数据库中直接进行数据清洗操作,以下是一些常见的SQL清洗操作。
2.1 处理缺失值
sql
复制代码
-- 删除缺失值所在的行 DELETE FROM orders WHERE customer_name IS NULL; -- 使用默认值填充缺失字段 UPDATE customers SET city = 'Unknown' WHERE city IS NULL; -- 使用均值填充数值字段的缺失值 UPDATE customers SET age = (SELECT AVG(age) FROM customers) WHERE age IS NULL;
2.2 处理重复数据
sql
复制代码
-- 删除重复行 DELETE FROM customers WHERE customer_id IN ( SELECT customer_id FROM customers GROUP BY customer_id HAVING COUNT(customer_id) > 1 ); -- 删除特定列重复的数据(保留最新记录) WITH RankedCustomers AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY last_update DESC) AS rn FROM customers ) DELETE FROM RankedCustomers WHERE rn > 1;
2.3 格式不一致的清洗
sql
复制代码
-- 将名字字段中的所有字符转换为小写 UPDATE customers SET name = LOWER(name); -- 格式化日期字段 UPDATE orders SET order_date = TO_DATE(order_date, 'YYYY-MM-DD') WHERE order_date IS NOT NULL;
2.4 处理异常值
sql
复制代码
-- 删除异常值(如年龄大于120岁) DELETE FROM customers WHERE age > 120; -- 用中位数替换异常值 WITH MedianAge AS ( SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY age) AS median_age FROM customers ) UPDATE customers SET age = (SELECT median_age FROM MedianAge) WHERE age > 120;
2.5 数据格式转换
sql
复制代码
-- 转换货币格式,将字符串中的货币符号移除并转为数字 UPDATE products SET price = CAST(REPLACE(REPLACE(price, '$', ''), ',', '') AS DECIMAL);
3. 使用 Shell 脚本 进行简单数据清洗
Shell 脚本适合处理文件级别的简单数据清洗操作,例如清洗 CSV 文件中的数据。
3.1 清理CSV文件中的空行
bash
复制代码
# 删除空行并输出到新文件 sed '/^$/d' data.csv > cleaned_data.csv
3.2 批量替换文本
bash
复制代码
# 将所有的 'NULL' 替换为 'Unknown' sed 's/NULL/Unknown/g' data.csv > cleaned_data.csv
3.3 删除重复行
bash
复制代码
# 删除文件中的重复行 sort data.csv | uniq > cleaned_data.csv
总结
使用脚本进行数据清洗的选择取决于具体的数据问题和工作环境:
- Python(Pandas) 非常适合处理复杂的大数据集和数据分析。
- SQL 更适合在数据库中直接操作数据,尤其是结构化数据的清洗。
- Shell 脚本 适用于文本文件级别的批量处理和清理。
相关文章:
数据清洗(脚本)
使用脚本清洗数据时,可以根据具体的数据问题选择编程语言,如Shell、Python、SQL等。这里我以 Python(Pandas库) 和 SQL 为例,演示如何通过脚本进行数据清洗。 1. 使用 Python(Pandas库) 进行数…...
jmeter中发送post请求遇到的问题
用jmeter发送post请求,把请求参数放在Body Data处,参数都写得正确,但没想到结果每次都报错,直接响应结果乱七八糟,改成用Parameters,反而不乱报错了。 上图 请求里如下 另外一些请求也是这样 这个响应结果也是错误的…...
Java中使用protobuf
一、简介 Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化。 Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。 Protocol B…...
2020款Macbook Pro A2251无法充电无法开机定位及修复
问题背景 up主有一台2020年的Macbook Pro,带Touch Bar,16G512G,四核I5,型号A2251 应该是一周没充电了,之前还用的好好的,后来有一天出差想带上 打开没电,手头上有个小米的66W快充头,…...
Spring Cloud --- 引入Gateway网关
引入Gateway网关 介绍 Spring Cloud Gateway 组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway 是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点 IP 端口信息,从…...
ESP32-C3实现定时器的启停(Arduino IDE)
1概述 ESP32-C3微控制器有多个定时器,这些定时器可用于各种用途,包括计时、生成PWM信号、测量输入信号的频率等。以下是ESP32-C3上可用的定时器资源: 两个硬件定时器: 定时器0:这是一个通用定时器,通常用于…...
centos升级g++使其支持c++17
centos升级g使其支持c17 升级g的原因现象原因 升级g方法更新镜像源yum升级g版本 总结 升级g的原因 现象 编译最新版本的jsoncpp报一下错误 jsontest.h:87:37: error: ‘hexfloat’ is not a member of ‘std’oss << std::setprecision(16) << std::hexfloat &l…...
Pytest日志收集器配置
前言 在pytest框架中,日志记录(logging)是一个强大的功能,它允许我们在测试期间记录信息、警告、错误等,从而帮助调试和监控测试进度。 pytest与Python标准库中的logging模块完美集成,因此你可以很容易地在…...
Morris算法(大数据作业)
我只能说,概率证明真的好难啊!(;′⌒) 这也证明我的概率论真的学的很差劲,有时间一定要补补/(ㄒoㄒ)/~~ 算法不难证明难! 当一个数足够大时,能不能用更少的空间来近似表示这个整数n,于是&…...
TCP/IP协议 【三次握手】过程简要描述
当建立TCP连接时,三次握手的作用简要描述如下: 第一次握手(客户端向服务器发送SYN包):客户端发送SYN包给服务器,确认服务器是否在线并等待响应。 第二次握手(服务器向客户端发送SYNACK包&…...
docker 数据管理,数据持久化详解 二 数据卷容器
数据卷和数据卷容器核心区别 持久性对比 数据卷:当您直接在启动容器时指定了一个数据卷(例如,使用docker run -v /data),这个数据卷会自动创建,并且其内容会在容器停止或删除后继续存在。您可以随时通过Do…...
Logrotate:Linux系统日志轮转和管理的实用指南
Logrotate是Linux系统中用于自动化管理日志文件的强大工具,它能够高效、安全地轮转、压缩和清理日志文件,从而有效控制日志文件大小,节省磁盘空间,并显著提升系统可维护性和安全性。本文档将提供Logrotate的实用指南,涵…...
八股面试3(自用)
基本数据类型和引用数据类型区别 java中数据类型分为基本数据类型和引用数据类型 8大基本数据类型 1.整数:int,long,short,byte 2.浮点类型:float,double 3.字符类型:char 4.布尔类型&…...
【微服务】springboot3 集成 Flink CDC 1.17 实现mysql数据同步
目录 一、前言 二、常用的数据同步解决方案 2.1 为什么需要数据同步 2.2 常用的数据同步方案 2.2.1 Debezium 2.2.2 DataX 2.2.3 Canal 2.2.4 Sqoop 2.2.5 Kettle 2.2.6 Flink CDC 三、Flink CDC介绍 3.1 Flink CDC 概述 3.1.1 Flink CDC 工作原理 3.2 Flink CDC…...
【Android】浅析OkHttp(1)
【Android】浅析OkHttp(1) OkHttp 是一个高效、轻量级的 HTTP 客户端库,主要用于 Android 和 Java 应用开发。它不仅支持同步和异步的 HTTP 请求,还支持许多高级功能,如连接池、透明的 GZIP 压缩、响应缓存、WebSocke…...
Generate-on-Graph
目录 摘要1 引言2 相关工作4 不完整知识图谱问答(IKGQA)4.1 任务介绍4.2 数据集构建 5 Generate-on-Graph (GoG) 摘要 为了解决大型语言模型(LLMs)在知识不足和幻觉问题上的困扰,众多研究探索了将LLMs与知识图谱&…...
学习笔记——交换——STP(生成树)简介
一、技术背景 1、生成树技术背景 交换机单线路组网,存在单点故障(上左图),上行线路及设备都不具备冗余性,一旦链路或上行设备发生故障,业务将会中断。 为了使得网络更加健壮、更具有冗余性,将拓扑修改为(上右图)接入…...
【Linux从入门到精通一】操作系统概述与Linux初识
个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] 📱…...
Git 深度解析 —— 从基础到进阶
目录 1. Git 基础概念 1.1 版本控制 (Version Control) 1.2 分布式版本控制 (Distributed Version Control) 1.3 核心概念 1.4 Git 工作流程 2. Git 常用命令 2.1 初始化仓库 2.2 添加文件 2.3 提交修改 2.4 查看状态 2.5 查看历史记录 2.6 切换分支 2.7 创建分支…...
PCIE-变量总结
1.changed_speed_recovery: 表示链路双方已经将链路速率协商为更高的速率。 在configuration.complete状态下此变量会reset成0; 当前状态在recovery.rcvrlock状态: 在经过24ms的timeout之后,任何一个已经configured的lane&…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
