Pandas数据清洗实战之清洗猫眼电影

embedded/2025/3/13 15:51:24/
本次案例所需要用到的模块
pandas(文件读取保存 操作表格的模块)

将上次Scrapy爬取下来的文件 做个数据清洗 变成我们想要的数据

确定目的:将此文件中的duration字段中的分钟  和publisher_time上映去掉 只保留纯数值

数据清洗题目如下:

  • 修复 publish_time列中的错误数据  去除无用的数据

  • 清洗 duration 列并转为整数类型   duration 列包含冗余单位(如 分钟),需提取数字并转为整数

  • 拆分 area 列中的多地区数据  area 列用|分隔多个地区,需拆分为列表或单独列

  • area 列用|分隔多个地区,需拆分为列表或单独列  name 列包含中英文名称,需提取中文名(如 霸王别姬)

  • 提取 name 列中的纯中文名

  •  检查并删除重复的电影条目  检查是否有完全重复的行并删除

  • 处理缺失值  检查各列是否有缺失值并填充或删除。

  • 最后保存为新的Excel文件

OK 我们开始对数据进行清洗

首先 需要对数据内容做一个大概的了解

python"># 第一步 导包  取别名
import pandas as pd# 读取文件 设置索引值为False
df = pd.read_excel('movies.xlsx', index_col=False)# df.head() 默认可以查看前五行的数据  括号里面的参数可以中间写
# df.info() 可以查看数据的结构类型
# df.shape 可以查看几行几列
# df.descibe() 查看数据类型的信息

1.修复 publish_time列中的错误数据  去除无用的数据
  我们可以采用正则去提取

python"># 将上映的字段去掉
df['publish_time'] = df['publish_time'].str.replace(' 上映', '', regex=False)
# 匹配纯数字 提取出来
df['publish_time'] = df['publish_time'].str.replace(r'\d+ .*?', '', regex=True)
# 去除无用的数据   这个会取到之前的时长 我们需要将其除去
df['publish_time'] = df['publish_time'].str.replace('分钟', '', regex=False)
# 转化为时间格式的数据 无法转换的数据 为NaT
df['publish_time'] = pd.to_datetime(df['publish_time'], errors='coerce')
# 设置时间的格式为 年月日
df['publish_time'] = df['publish_time'].dt.strftime('%Y-%m-%d')
# 将空值数据直接删除
df.dropna(subset='publish_time', inplace=True)

2.清洗 duration 列并转为整数类型   duration 列包含冗余单位(如 分钟),需提取数字并转为整数

python"># 清洗 duration 列并转为整数类型
# duration 列包含冗余单位(如 分钟),需提取数字并转为整数
# 读取这一列的数据 转换成字符串的形式 接着通过正则将分钟去除 最后转换成整型
df['duration'] = df['duration'].str.replace(' 分钟', '', regex=False).astype(int)
# Explain: 读取数据可以通过类似字典的形式 也可以通过df.列名的形式regex 为True表示使用正则语法

3.清洗完之后 可以打印这一列的数据出来看下 是否成功

4.拆分 area 列中的多地区数据  area 列用|分隔多个地区,需拆分为列表或单独列

python"># 拆分 area 列中的多地区数据
# area 列用|分隔多个地区,需拆分为列表或单独列
df['area'] = df['area'].str.split('、').str.join('|')

   将处理完的列表重新赋值给原来的列表

5.提取 name 列中的纯中文名  

6.通过观察可以发现中英文 之间又-符号隔开 我们可以转换成字符串然后通过分割取前面的值

python"># 提取 name 列中的纯中文名
# name 列包含中英文名称,需提取中文名(如 霸王别姬)
df['name'] = df['name'].str.split(' - ').str[0]

python">print(df.iloc[0])
# 可以查看第几行的数据 0为第一行 索引取值

7.检查并删除重复的电影条目  检查是否有完全重复的行并删除

Explain: 重复值的定义为 两条数据完全一样才被定义为重复值

python"># 语法如下 使用后drop_duplicates 后面参数接的是要删除重复值的所有列
# inplace 为True 是指在原有的数据上进行保存
df.drop_duplicates(subset=df.columns, inplace=True)

8.处理缺失值  检查各列是否有缺失值并填充或删除

python">print(df.isnull().sum())
# 统计缺失值的个数

9.处理缺失值  检查各列是否有缺失值并填充或删除

python">df.dropna(inplace=True)
# 删除缺失值
# 如果有缺失值  可以使用该列的均值或者中位数进行填充
# df['列名'].fillna(df['列名'].mean(), inplace=True)  用均值填充
# df['列名'].fillna(df['列名'].median(), inplace=True)  用中位数填充

10.最后保存为新的Excel文件

python"># 传入文件名 设置索引列为False  就不会生成单独一行索引
df.to_excel('clean_movies.xlsx', index=False)

最后我们对比一下清洗前后的数据 后续也可以做可视化

本次的案例分享就到此结束 感谢大家的观看 您的点赞和关注是我更新的动力
也可以看看我之前的文章希望对你有帮助


http://www.ppmy.cn/embedded/172288.html

相关文章

基于Tkinter与DeepSeek API的多模型智能聊天系统设计与实现

基于Tkinter与DeepSeek API的多模型智能聊天系统设计与实现 一、系统概述 本文介绍一款基于Python Tkinter GUI框架和DeepSeek API开发的智能聊天系统。该系统具备多模型切换、主题定制、对话管理三大核心功能,采用模块化设计实现高效的异步通信机制。程序支持Win…

数势科技黎科峰:DeepSeek 引爆数据分析“奇点”,创造普惠化新机遇丨数据猿专访...

大数据产业创新服务媒体 ——聚焦数据 改变商业 2025年国内人工智能“春天”的脚步竟然来得如此急促。当人们还沉浸在春节假期之中,一场波及多个行业的巨变悄然发生,1月20日,DeepSeek R1横空出世,打破了先前多数投资人保守的“判…

本地部署资源聚合搜索神器 Jackett 并实现外部访问

Jackett 是一款免费的开源跨平台的资源聚合搜索软件。它支持众多种子站和网盘站,可以作为代理服务器通过 API 来响应来自应用程序,然后将结果发送回请求软件‌。而且支持跨平台。 本文将详细的介绍如何利用 Docker 在本地部署 Jackett 并结合路由侠实现…

国产FPGA往事

本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 我去年和紫光同创原厂的技术专家写了一本书——《国产FPGA权威开发指南》,我想请FPGA开发者同行多多指点和…

无需 Docker 也能下载镜像!轻松获取 Docker 镜像文件!

背景问题 在日常开发或运维工作中,我们经常需要下载 Docker 镜像,但可能会遇到以下问题: 🔹 服务器无法访问 Docker Hub,导致 docker pull 失败。 🔹 Windows 端没有安装 Docker,但仍然需要获…

【江协科技STM32】ADC数模转换器-学习笔记

ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁,ADC是一种将连续的模拟信号转换为离散的数字信号的设备或模块12位逐次逼近型…

µCOS-III从入门到精通 第十三章(事件标志组)

参考教程:【正点原子】手把手教你学UCOS-III实时操作系统_哔哩哔哩_bilibili 一、事件标志组简介 1、概述 (1)事件标志位是一个“位”,用来表示事件是否发生。 (2)事件标志组是一组事件标志位的集合&am…

类与对象(一)

目录 1.面向过程和面向对象初步认识 2. 类的引入 3. 类的定义 4. 类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7. 类对象模型 7.1 类对象的存储方式 7.2 结构体内存对齐规则 7.3 特殊情况:空类的大小 8. this 指针 8.…