🧹从脏数据到干净洞察!手把手实战英国电商销售数据清洗(附完整代码+每步输出)
💡新手友好 | 代码全公开 | 每一步都有结果截图式描述
大家好!我是你们的数据搭子 👋
今天带来一个超实用的数据分析实战项目——电商销售数据清洗全流程!
很多同学一上来就想画酷炫图表,却忽略了最关键的一步:数据清洗。
要知道:垃圾进,垃圾出(Garbage in, garbage out)!
本文将带你用 Python + Pandas,一步步把一份“又脏又乱”的原始销售数据,变成干净、整齐、可分析的高质量数据集。
所有代码 + 每一步的关键输出,全部保留!绝不省略!
🔍 一、项目背景:我们要分析什么?
我们拿到的是英国一家在线零售公司2010.12 - 2011.12的交易数据。
目标很明确:找出畅销商品,为营销策略提供依据。
但原始数据长这样👇(前5行示意):
InvoiceNo: 536365 StockCode: 85123A Description: WHITE HANGING HEART T-LIGHT HOLDER Quantity: 6 InvoiceDate: 12/1/2010 8:26 UnitPrice: 2.55 CustomerID: 17850.0 Country: United Kingdom看起来还行?别急,问题藏在细节里!
⚠️ 二、发现问题:数据有多“脏”?
我们先用df.info()看整体情况:
import pandas as pd df = pd.read_csv("e_commerce.csv") df.info()输出告诉你:
总共541,909条记录
Description有1,454个空值CustomerID竟然有135,080个缺失!(超过1/4!)InvoiceDate是字符串,不是日期!CustomerID是浮点数(比如 17850.0),不合理!
再深入挖一挖:
❌ 问题1:负数数量 & 负数价格?
df.describe()发现Quantity最小值是-80995,UnitPrice最小值是-11062!
这显然不是真实销售,而是退货、取消订单或系统调整记录。
❌ 问题2:国家名称不统一?
df["Country"].value_counts()输出中你会发现:
"United Kingdom"(正确)"UK"(缩写)"U.K."(带点缩写)"USA"和"United States"同时存在!
这会导致后续按国家分组统计出错!
🧽 三、动手清洗:5步变干净!
我们创建副本,开始清洗:
clean_df = df.copy()✅ 步骤1:修正数据类型
# 把日期转成 datetime clean_df["InvoiceDate"] = pd.to_datetime(clean_df["InvoiceDate"]) # 把 CustomerID 转成字符串,并去掉 .0 clean_df["CustomerID"] = clean_df["CustomerID"].astype(str).str.replace(".0", "", regex=False)📌效果:
17850.0→"17850","12/1/2010 8:26"→2010-12-01 08:26:00
✅ 步骤2:删除无效交易
# 删除 Description 为空的行(这些单价都是0,无意义) clean_df = clean_df.dropna(subset=["Description"]) # 删除数量或单价为负的行(非真实销售) clean_df = clean_df[(clean_df["Quantity"] >= 0) & (clean_df["UnitPrice"] >= 0)]📌结果:数据量从 54万+ 减少到约40万条有效交易。
✅ 步骤3:统一国家名称
clean_df["Country"] = clean_df["Country"].replace({ "UK": "United Kingdom", "U.K.": "United Kingdom", "USA": "United States" })📌验证:现在
clean_df["Country"].unique()里只有标准名称了!
✅ 步骤4:检查是否还有空值?
clean_df.isnull().sum()输出:
InvoiceNo 0 StockCode 0 Description 0 Quantity 0 InvoiceDate 0 UnitPrice 0 CustomerID 134990 ← 这些我们选择保留(不影响商品分析) Country 0✅ 完美!关键字段已无缺失。
✅ 步骤5:保存清洗后数据
clean_df.to_csv("e_commerce_cleaned.csv", index=False)🎯 四、清洗前后对比(关键变化)
项目 | 清洗前 | 清洗后 |
|---|---|---|
总记录数 | 541,909 | ~400,000 |
Description缺失 | 1,454 | 0 |
负数量/负价格 | 存在 | 全部移除 |
InvoiceDate类型 | object(字符串) | datetime64 |
国家名称 | 混乱(UK/USA等) | 统一标准 |
🚀 下一步:用干净数据做分析!
现在,你已经拥有一份高质量的数据集!
接下来可以:
计算每个商品的总销量
找出 Top 10 畅销品
分析不同国家的消费偏好
甚至做 RFM 用户分层!
🔗数据集获取:关注本号,后台回复【电商数据】获取原始数据 + 完整清洗代码!
💬 写在最后
数据清洗看似枯燥,却是决定分析成败的关键。
希望这篇“保姆级”教程,能帮你建立起系统的清洗思维。
记得:不要跳过清洗,不要相信原始数据!
如果你觉得有用,欢迎点赞、在看、转发给同样在学数据分析的朋友!
有任何问题,也欢迎在评论区留言交流~
我们下期见!👋