news 2026/4/28 3:32:55

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python数据分析:英国电商销售数据实战

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

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

大家好!我是你们的数据搭子 👋
今天带来一个超实用的数据分析实战项目——电商销售数据清洗全流程

很多同学一上来就想画酷炫图表,却忽略了最关键的一步:数据清洗
要知道:垃圾进,垃圾出(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条记录

  • Description1,454个空值

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

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

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

再深入挖一挖:

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

df.describe()

发现Quantity最小值是-80995UnitPrice最小值是-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 用户分层!

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


💬 写在最后

数据清洗看似枯燥,却是决定分析成败的关键
希望这篇“保姆级”教程,能帮你建立起系统的清洗思维。

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

如果你觉得有用,欢迎点赞、在看、转发给同样在学数据分析的朋友!
有任何问题,也欢迎在评论区留言交流~

我们下期见!👋

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 22:24:04

Thinkphp和Laravel框架的基于人脸识别的学生考勤请假选课软件系统

目录基于ThinkPHP和Laravel框架的人脸识别学生管理系统摘要系统概述核心功能技术实现应用价值开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于ThinkPHP和Laravel框架的人脸识别学生管理系统摘要 系统概述 该系统整合Think…

作者头像 李华
网站建设 2026/4/16 14:33:44

AbMole小讲堂丨5-Fluorouracil:抗代谢剂在肿瘤研究中的实验指南

5-Fluorouracil (5-FU)是一种抗代谢物,其机理主要涉及抑制胸苷酸合成酶,从而干扰DNA复制,或通过掺入DNA序列中引起基因组的损伤。在细胞实验中,5-Fluorouracil(CAS No.:51-21-8)在耐药性p53缺陷…

作者头像 李华
网站建设 2026/4/18 10:33:56

Comsol弱形式求解三维光子晶体能带

Comsol弱形式求解三维光子晶体能带。 深夜两点盯着屏幕上扭曲的能带曲线,突然意识到三维光子晶体的数值模拟就像在量子迷宫里玩俄罗斯方块——每个晶格参数都可能让整个能带结构瞬间崩塌。传统界面操作总让我感觉戴着镣铐跳舞,直到某天偶然翻到COMSOL的…

作者头像 李华
网站建设 2026/4/23 12:28:13

Unity插件SafeArea Helper适配异形屏详解

一.导入插件SafeArea Helper 链接&#xff1a; Safe Area Helper 打开SafeAreaDemo场景&#xff0c;打开Simulator视图&#xff0c;切到异形屏机型 二.SafeArea.cs脚本分析 先上代码 using UnityEngine;namespace Crystal {/// <summary>/// Safe area implementatio…

作者头像 李华
网站建设 2026/4/21 7:37:28

计算机毕业设计之springboot基于微信小程序的图书馆座位管理系统的设计与实现

近年来互联网络的迅猛发展和电子终端设备的普及&#xff0c;赋予了各行业充足的发展空间。微信小程序的图书馆座位管理系统相比于传统信息技术&#xff0c;时效性是它最大的特色&#xff0c;已经在电子娱乐、经济等中发挥着举足轻重的作用。短时间内迅速扩大了线上管理系统的规…

作者头像 李华