数据清洗的定义
数据清洗(Data Cleaning) 是指对原始数据进行处理,以纠正、删除或填补不完整、不准确、重复或无关的数据,使其符合分析或建模的要求。数据清洗是数据预处理的关键步骤,直接影响后续分析和机器学习模型的效果。
数据清洗的主要任务
-
处理缺失值
-
删除缺失值(Drop)
-
填充缺失值(均值、中位数、众数、插值、预测填充)
-
-
处理异常值
-
删除(如超出合理范围的数据)
-
修正(如用上下限替换)
-
-
处理重复数据
-
删除完全重复的行
-
-
格式标准化
-
统一日期、时间、单位、字符串格式(如"USA" vs "United States")
-
-
数据类型转换
-
字符串转数值、日期解析、分类变量编码(One-Hot Encoding)
-
-
数据归一化/标准化
-
Min-Max归一化、Z-Score标准化
-
实际操作案例(Python + Pandas)
案例背景
假设有一份销售数据 sales_data.csv
,包含以下字段:
-
order_id
(订单ID) -
customer_name
(客户名,可能有缺失或重复) -
order_date
(日期,可能有格式不一致) -
price
(价格,可能有异常值) -
quantity
(数量,可能有缺失值)
数据清洗代码示例
python
复制
下载
import pandas as pd import numpy as np# 1. 加载数据 df = pd.read_csv("sales_data.csv")# 2. 查看数据基本情况 print(df.head()) # 查看前几行 print(df.info()) # 查看数据类型和缺失情况 print(df.describe()) # 数值统计(均值、最大最小值等)# 3. 处理缺失值 # 删除所有缺失的行(谨慎使用,可能丢失大量数据) df_cleaned = df.dropna() # 或用均值填充数值列 df["quantity"].fillna(df["quantity"].mean(), inplace=True) # 用"Unknown"填充文本列 df["customer_name"].fillna("Unknown", inplace=True) # 4. 处理重复数据 df.drop_duplicates(inplace=True) # 删除完全重复的行# 5. 处理异常值(假设price不应超过1000) df = df[df["price"] <= 1000] # 删除异常值 # 或用上限替换 df["price"] = df["price"].clip(upper=1000) # 超过1000的值替换为1000# 6. 格式标准化(统一日期格式) df["order_date"] = pd.to_datetime(df["order_date"], format="%Y-%m-%d") # 统一为YYYY-MM-DD# 7. 数据标准化(归一化) df["price_normalized"] = (df["price"] - df["price"].min()) / (df["price"].max() - df["price"].min())# 8. 保存清洗后的数据 df.to_csv("cleaned_sales_data.csv", index=False)
典型数据清洗场景
-
电商数据清洗
-
处理订单数据中的缺失地址
-
修正商品价格异常(如负值或极大值)
-
合并重复客户记录
-
-
金融风控数据清洗
-
填补缺失的交易金额
-
检测并处理异常交易(如突然大额转账)
-
-
社交媒体数据清洗
-
去除重复的评论
-
标准化用户昵称(如大小写统一)
-
总结
-
数据清洗目标:提高数据质量,使其适合分析或建模。
-
常见操作:处理缺失值、异常值、重复数据、格式标准化。
-
工具推荐:
-
Python(Pandas、NumPy)
-
SQL(去重、缺失值处理)
-
OpenRefine(可视化数据清洗工具)
-
通过数据清洗,可以显著提升后续数据分析的准确性和可靠性。