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

|----------------------------|---|
| 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)

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

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

相关推荐
零基础1233 小时前
DeepSeek V4.1 Flash (Batch) 的性能测试与应用
经验分享·python·语言模型·vllm
Yyyyyy~3 小时前
【Anaconda】安装
人工智能·python
LOVE️YOU3 小时前
Python 函数名、函数对象与“把函数作为参数传递”
开发语言·python
2601_957883843 小时前
2026年9月:雷神笔记本售后相关资讯
python·电脑
天赐范式4 小时前
天赐范式第185天:让漂变开始定量——扫N看选择主导边界
python·信噪比·数字生命·天赐范式·动态运行时·种群大小·遗传漂变
Jo乔戈里4 小时前
免费本地搜图软件
图像处理·python·搜索引擎·ai
for_ever_love__4 小时前
字符串处理——f-string、切片与正则,清洗文本的第一把刀
python·大模型·虚拟环境
夜晚回家4 小时前
Python 零基础入门 | 输入的数字为什么不能直接算
开发语言·python
打工仔折腾 AI5 小时前
把AI Agent托管在家用电脑:UU远程终端与端口映射实测记录
人工智能·后端·python·langchain·ai agent 实战
yivifu5 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub