数据清洗(脚本)

news2024/10/21 3:35:52

使用脚本清洗数据时,可以根据具体的数据问题选择编程语言,如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 脚本 适用于文本文件级别的批量处理和清理。

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

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

相关文章

2009年国赛高教杯数学建模A题制动器试验台的控制方法分析解题全过程文档及程序

2009年国赛高教杯数学建模 A题 制动器试验台的控制方法分析 汽车的行车制动器&#xff08;以下简称制动器&#xff09;联接在车轮上&#xff0c;它的作用是在行驶时使车辆减速或者停止。制动器的设计是车辆设计中最重要的环节之一&#xff0c;直接影响着人身和车辆的安全。为了…

分享一个IDEA里面的Debug调试设置

1.问题来源 其实我们在这个IDEA里面的这个进行调试的时候&#xff0c;这个是只有步入&#xff0c;出去的选项的&#xff1b; 之前学习这个sort的底层源码的时候&#xff0c;进不去&#xff0c;我们是设置了一个取消java*什么的选项&#xff0c;然后使用这个step into就可以进…

计算机网络易混知识点

1.以太网采用曼彻斯特编码&#xff1b;以太网帧最短为64B&#xff0c;其中14个B首部(目的MAC-6B&#xff0c;源MAC-6B&#xff0c;类型-2B)4B尾部 2.OSI协议中&#xff0c;每一层为上一层提供服务&#xff0c;为下一层提供接口 3.帧序号的比特数表示的是发送窗口的大小&#…

java逻辑运算符 C语言结构体定义

1. public static void main(String[] args) {System.out.println(true&true);//&两者均为true才trueSystem.out.println(false|false);// | 两边都是false才是falseSystem.out.println(true^false);//^ 相同为false&#xff0c;不同为trueSystem.out.println(!false)…

(38)MATLAB分析带噪信号的频谱

文章目录 前言一、MATLAB仿真代码二、仿真结果画图总结 前言 本文给出带噪信号的时域和频域分析&#xff0c;指出频域分析在处理带噪信号时的优势。 首先使用MATLAB生成一段信号&#xff0c;并在信号上叠加高斯白噪声得到带噪信号&#xff0c;然后对带噪信号对其进行FFT变换&…

Java面试指南:Java基础介绍

这是《Java面试指南》系列的第1篇&#xff0c;本篇主要是介绍Java的一些基础内容&#xff1a; 1、Java语言的起源 2、Java EE、Java SE、Java ME介绍 3、Java语言的特点 4、Java和C的区别和联系&#xff1f; 5、面向对象和面向过程的比较 6、Java面向对象的三大特性&#xff1a…

云计算-----单机LNMP结构WordPress网站

LNMP结构 博客网站 day1 小伙伴们&#xff0c;LNMP结构在第一二阶段浅浅的学习过&#xff0c;这里我们可以离线部署该结构。L指&#xff08;虚拟机&#xff09;服务器&#xff0c;nginx&#xff08;前端代理服务器&#xff09;mysql数据库&#xff0c;最后基于php建设动态…

AlDente Pro for Mac电脑 充电限制保护工具 安装教程【简单,轻松上手】

Mac分享吧 文章目录 AlDente Pro for Mac 充电限制保护工具 安装完成&#xff0c;软件打开效果一、AlDente Pro for Mac 充电限制保护工具 Mac电脑版——v1.28.41️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件&#xff0c;将安装包从左侧拖入右侧文件夹中&#xff0c;等…

Halcon实战——基于NCC模板匹配的芯片检测(附源码)

Halcon实战——基于NCC模板匹配的芯片检测&#xff08;附源码&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测&#xff0c;图像分类&am…

Java | Leetcode Java题解之第493题翻转对

题目&#xff1a; 题解&#xff1a; class Solution {public int reversePairs(int[] nums) {Set<Long> allNumbers new TreeSet<Long>();for (int x : nums) {allNumbers.add((long) x);allNumbers.add((long) x * 2);}// 利用哈希表进行离散化Map<Long, Int…

linux 效率化 - 输入法 - fcitx5

安装 Fcitx5 1. 卸载 ibus 框架 由于 ibus 和 fcitx 可能会冲突&#xff0c;先卸载 ibus&#xff08;暂未确认原因&#xff09; sudo apt remove --purge ibus2. 安装 fcitx5 输入法框架 sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk…

深入理解Nest的REQUEST范围和TRANSIENT范围

深入理解Nest的REQUEST范围和TRANSIENT范围 单例模式REQUEST范围控制器的REQUEST范围REQUEST范围的冒泡特性场景 TRANSIENT范围例外场景 总结 单例模式 单例模式是指在整个程序执行期间&#xff0c;程序内的类都会实例化&#xff0c;且与应用程序生命周期直接相关&#xff0c;…

javax.el.PropertyNotFoundException: Property ‘XXX‘ not found on type XXX(类的路径)

捣鼓了半小时的bug 在网上找了好多方案,都没有解决 其中一个佬的解决方案:异常&#xff1a;javax.el.PropertyNotFoundException: Property xxx not found on type java.lang.String-CSDN博客 但是还是没有解决我的问题 最终解决方法,在jsp文件头部导入了类包(第三行我导入…

【Nginx系列】Nginx配置超时时间

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

MySQL日期类型选择建议

我们平时开发中不可避免的就是要存储时间&#xff0c;比如我们要记录操作表中这条记录的时间、记录转账的交易时间、记录出发时间、用户下单时间等等。你会发现时间这个东西与我们开发的联系还是非常紧密的&#xff0c;用的好与不好会给我们的业务甚至功能带来很大的影响。所以…

深入拆解TomcatJetty(二)

深入拆解Tomcat&Jetty&#xff08;二&#xff09; 专栏地址&#xff1a;https://time.geekbang.org/column/intro/100027701 1、Tomcat支持的IO模型和应用层协议 IO模型&#xff1a; NIO&#xff1a;非阻塞 I/O&#xff0c;采用 Java NIO 类库实现。NIO2&#xff1a;异…

Cyber RT 之 Timer Component 实践(apollo 9.0)

实验内容 Component 是 Cyber RT 提供的用来构建功能模块的基础类&#xff0c;Component 有两种类型&#xff0c;分别为 Component 和 TimerComponent。 相较于 Component&#xff0c;TimerComponent 不提供消息融合&#xff0c;也不由消息触发运行&#xff0c;而是由系统定时…

UE5 gameplay学习 蓝图0 level blueprint

首先在左上角这个位置可以创建一个这个蓝图 我理解这个蓝图适合做全局事件规划啥的 在场景选中一个物体&#xff0c;右侧面板拿到他&#xff0c;直接拖入蓝图&#xff0c;就能操作他了 这里获取到了这个物体&#xff0c;在gamebegin的时候把Z加了500 执行播放的时候能看见他从…

Windows API 一 ----起步

目录 1.介绍主函数入口参数。 2. 简单介绍 Windows.h 这个头文件 小结&#xff0c;也聊一聊 1.介绍主函数入口参数。 第一个参数: HINSTANCE 类型的 参数&#xff0c; 称为“实例句柄“&#xff0c;这个参数唯一标志了我们写的这个程序。 第二个参数&#xff1a; HINSTANCE…

poisson过程——随机模拟(Python和R实现)

Python实现 exponential()使用&#xff0c;自动poisson过程实现。 import numpy as np import matplotlib.pyplot as plt# Parameters lambda_rate 5 # rate parameter (events per time unit) T 10 # total time# Generate Poisson process times np.random.exponential(…