Python数据分析:英国电商销售数据实战

🧹从脏数据到干净洞察!手把手实战英国电商销售数据清洗(附完整代码+每步输出)

💡 新手友好 | 代码全公开 | 每一步都有结果截图式描述

大家好!我是你们的数据搭子 👋

今天带来一个超实用的数据分析实战项目 ------电商销售数据清洗全流程

很多同学一上来就想画酷炫图表,却忽略了最关键的一步:数据清洗

要知道:垃圾进,垃圾出(Garbage in, garbage out)

本文将带你用 Python + Pandas,一步步把一份"又脏又乱"的原始销售数据,变成干净、整齐、可分析的高质量数据集。
所有代码 + 每一步的关键输出,全部保留!绝不省略!


🔍 一、项目背景:我们要分析什么?

我们拿到的是英国一家在线零售公司 2010.12 - 2011.12 的交易数据。
目标很明确:找出畅销商品,为营销策略提供依据。

但原始数据长这样👇(前5行示意):

python 复制代码
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() 看整体情况:

python 复制代码
import pandas as pd
df = pd.read_csv("e_commerce.csv")
df.info()

输出告诉你:

  • 总共 541,909 条记录

  • Description1,454 个空值

  • CustomerID 竟然有 135,080 个缺失!(超过1/4!)

  • InvoiceDate 是字符串,不是日期!

  • CustomerID 是浮点数(比如 17850.0),不合理!

再深入挖一挖:

❌ 问题1:负数数量 & 负数价格?

python 复制代码
df.describe()

发现 Quantity 最小值是 -80995UnitPrice 最小值是 -11062

这显然不是真实销售,而是退货、取消订单或系统调整记录

❌ 问题2:国家名称不统一?

python 复制代码
df["Country"].value_counts()

输出中你会发现:

  • "United Kingdom"(正确)

  • "UK"(缩写)

  • "U.K."(带点缩写)

  • "USA""United States" 同时存在!

这会导致后续按国家分组统计出错!


🧽 三、动手清洗:5步变干净!

我们创建副本,开始清洗:

python 复制代码
clean_df = df.copy()

✅ 步骤1:修正数据类型

python 复制代码
# 把日期转成 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:删除无效交易

python 复制代码
# 删除 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:检查是否还有空值?

python 复制代码
clean_df.isnull().sum()

输出:

复制代码
InvoiceNo      0
StockCode      0
Description    0
Quantity       0
InvoiceDate    0
UnitPrice      0
CustomerID     134990   ← 这些我们选择保留(不影响商品分析)
Country        0

✅ 完美!关键字段已无缺失。


✅ 步骤5:保存清洗后数据

python 复制代码
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 用户分层!

🔗 数据集获取:关注本号,后台回复【电商数据】获取原始数据 + 完整清洗代码!


💬 写在最后

数据清洗看似枯燥,却是决定分析成败的关键

希望这篇"保姆级"教程,能帮你建立起系统的清洗思维。

记得:不要跳过清洗,不要相信原始数据!

如果你觉得有用,欢迎点赞、在看、转发 给同样在学数据分析的朋友!

有任何问题,也欢迎在评论区留言交流~

我们下期见!👋

相关推荐
charlie114514191几秒前
现代Qt开发——0.1——如何在IDE中配置Qt环境?
开发语言·c++·ide·qt·嵌入式
游乐码1 分钟前
c#StringBuilder
开发语言·c#
五阿哥永琪1 分钟前
record只读类
java·开发语言
MarkHD2 分钟前
从“能跑”到“好用”:Python脚本监控与告警实战(邮件/钉钉/企业微信)
python·钉钉·企业微信
枫叶丹44 分钟前
【HarmonyOS 6.0】窗口能力增强:PC/2in1与自由多窗模式的深度解析
开发语言·华为·harmonyos
AI科技星4 分钟前
基于三维空间合速度恒为光速公理的统一动力学与热力学理论:温度本质的第一性原理诠释与物质全物态实验验证
开发语言·线性代数·机器学习·计算机视觉·数学建模
Dovis(誓平步青云)6 分钟前
《QT学习第二篇:QT的常用控件属性与按钮、view系列、Label、输入框》
开发语言·qt·学习
新知图书6 分钟前
微软Power BI主要架构
数据分析·power bi·商务数据分析
胖咕噜的稞达鸭8 分钟前
C/C++动态内存管理,malloc,calloc,realloc的区别,动态内存中的错误汇总
c语言·开发语言·c++
charlie1145141918 分钟前
嵌入式C++教程实战之Linux下的单片机编程(6):从点亮第一盏LED开始 —— 我们为什么要用现代C++写STM32
linux·c语言·开发语言·c++·stm32·单片机