当前位置: 首页 > article >正文

数据清洗(脚本)

使用脚本清洗数据时,可以根据具体的数据问题选择编程语言,如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.kler.cn/news/358199.html

相关文章:

  • 【Linux】从多线程同步到生产者消费者模型:多线程编程实践
  • 零代码快速开发智能体 |甘肃旅游通
  • 【str_replace替换导致的绕过】
  • Windows和Linux在客户端/服务端在安全攻防方面的区别
  • 路由表来源(基于华为模拟器eNSP)
  • web前端--html 5---qq注册
  • 基于SpringBoot+Vue+MySQL的社区医疗管理系统
  • 【linux】GCC 7和GCC 8版本不再包含在默认的软件仓库中
  • hi3798mv100 linux 移植
  • Rocky Linux 9安装后无法远程ssh密码登录解决
  • 网盘直链下载神器NDM
  • MySQL数据库:基础介绍下载与安装
  • Unity中通过给定的顶点数组生成凸面体的方法参考
  • quic-go源码二---server accept请求
  • 【Linux】system V进程间通信--共享内存,消息队列,信号量
  • 服务器运维监控平台
  • 数据结构和算法的常见面试题
  • kernel32.dll下载地址:如何安全地恢复系统文件
  • rk3568 android11 单独烧写内核。
  • RHCE【远程连接服务器】