关注不迷路,点赞走好运!!!
一、数据厨房的"双胞胎"危机
想象你经营着"代码の茶"奶茶连锁店🧋,某天发现:
同一订单重复录入三次?
某分店销量突增到1000杯?
新品试饮评分出现负数?
这些数据异常就像奶茶里的珍珠卡住吸管,必须及时处理!今天带你用Pandas双神器(drop_duplicates、异常检测)化解危机!
二、重复值清理术:订单去重魔法
2.1 基础去重:删除完全相同的行
import pandas as pd
生成含重复订单的数据
订单数据 = pd.DataFrame({
'订单号': ['A001', 'A002', 'A002', 'A003', 'A003'],
'商品': ['珍珠奶茶', '椰果绿茶', '椰果绿茶', '布丁拿铁', '芋圆奶盖'],
'销量': [1, 2, 2, 3, 1]
})
print("🍵原始订单数据:")
print(订单数据)
一键去重
清洁数据 = 订单数据.drop_duplicates()
print("\n✨清洁后数据:")
print(清洁数据)
输出结果:
订单号 商品 销量
0 A001 珍珠奶茶 1
1 A002 椰果绿茶 2
3 A003 布丁拿铁 3
4 A003 芋圆奶盖 1
2.2 高级去重:指定列与保留策略
保留最新订单(假设数据按时间顺序排列)
高级去重 = 订单数据.drop_duplicates(subset=['订单号'], keep='last')
标记重复订单
订单数据['是否重复'] = 订单数据.duplicated(subset=['订单号'], keep=False)
print("\n🔍标记重复订单:")
print(订单数据)
通过subset
指定关键列,keep
控制保留策略
三、异常值捕捉术:销量异动雷达
3.1 Z-Score检测法
from scipy import stats
生成异常销量数据
销售数据 = pd.DataFrame({
'日期': pd.date_range('2024-05-01', periods=10),
'销量': [50, 48, 53, 1000, 49, 55, 52, 47, 51, 999]
})
计算Z值
z_scores = stats.zscore(销售数据['销量'])
销售数据['异常标记'] = abs(z_scores) > 3
print("\n🚨异常销售警报:")
print(销售数据[销售数据['异常标记']])
3.2 IQR四分位距法
IQR方法检测
Q1 = 销售数据['销量'].quantile(0.25)
Q3 = 销售数据['销量'].quantile(0.75)
IQR = Q3 - Q1
销售数据['异常标记'] = (销售数据['销量'] < (Q1 - 1.5*IQR)) | (销售数据['销量'] > (Q3 + 1.5*IQR))
print("\n📊IQR异常检测结果:")
print(销售数据[销售数据['异常标记']])
两种方法分别适用于不同分布特征的数据
四、异常值处理:数据修复魔法
4.1 删除异常记录
清洁销量 = 销售数据[~销售数据['异常标记']]
print("\n🗑️删除异常后数据:")
print(清洁销量)
4.2 智能替换异常
前后值插值填充
销售数据['销量'] = 销售数据['销量'].where(~销售数据['异常标记'], None).interpolate()
print("\n🔧修复后数据:")
print(销售数据[['日期', '销量']])
利用插值方法保持数据连续性
五、避坑指南:奶茶店长手册
常见事故 | 灾难现场 | 解药配方 | 原理剖析 |
---|---|---|---|
误删有效数据 | 日销量减少50% | 先标记后处理 | 避免连带删除 |
错误阈值设定 | 正常波动被误杀 | 结合业务分析 | 动态调整参数 |
处理顺序颠倒 | 重复值影响异常检测 | 先去重后检测 | 保证数据纯度 |
内存溢出 | 程序突然崩溃 | 分块处理数据 | 优化计算资源 |
六、实战演练:智能清洁系统
def 智能清洁系统(原始数据):
# 阶段一:重复值处理
清洁数据 = 原始数据.drop_duplicates(subset=['订单号'], keep='last')
# 阶段二:异常值检测
z_scores = stats.zscore(清洁数据['销量'])
异常标记 = abs(z_scores) > 3
# 阶段三:异常值修复
清洁数据.loc[异常标记, '销量'] = 清洁数据['销量'].median()
# 生成报告
print(f"清理重复值:{len(原始数据)-len(清洁数据)}条")
print(f"修复异常值:{sum(异常标记)}处")
return 清洁数据
print("\n🤖系统运行演示:")
print(智能清洁系统(订单数据))
觉得有用?长按点赞三连击,知识不迷路~