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)

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

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

相关推荐
Wiktok1 小时前
基于ThinkPHP6用户登录逻辑,结合FastAPI框架实现用户登录系统的全流程解析
python·fastapi
WIN赢2 小时前
【性能测试入门_01性能测试jmeter基础实操场景详解】
ide·python·pycharm
请为小H留灯3 小时前
Python中很常用的100个函数整理
开发语言·python
七月初七774 小时前
Excel多级联动下拉菜单设置
python·excel·pandas
.昕..5 小时前
(二)seacmsv9注入管理员账号密码+orderby+limit
python·网络安全
HerrFu5 小时前
可狱可囚的爬虫系列课程 17:lxml模块的使用
爬虫·python
码叔义6 小时前
X509TrustManager信任SSL证书
python·网络协议·ssl
阿波拉6 小时前
AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas’问题解决
开发语言·python
m0_748247806 小时前
Python连接SQL SEVER数据库全流程
数据库·python·sql