当前位置: 首页 > article >正文

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

本次案例所需要用到的模块
pandas(文件读取保存 操作表格的模块)

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

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

数据清洗题目如下:

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

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

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

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

  • 提取 name 列中的纯中文名

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

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

  • 最后保存为新的Excel文件

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

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

# 第一步 导包  取别名
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列中的错误数据  去除无用的数据
  我们可以采用正则去提取

# 将上映的字段去掉
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 列包含冗余单位(如 分钟),需提取数字并转为整数

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


http://www.kler.cn/a/581061.html

相关文章:

  • Centos7虚拟机安装mysql8
  • 涨薪技术|Kubernetes(k8s)之Ingress
  • 小程序酒店:如何实现智能预订与在线支付?
  • SealOS部署k8s集群(单节点)
  • Spring(3)—— 获取http头部信息
  • 《平凡的世界》:在泥土中寻找星辰的勇气
  • XYCTF2024
  • 面试之《TypeScript泛型》
  • PostgreSQL 18新特性之虚拟生成列
  • [mybatis]resultMap详解
  • rdiff-backup备份
  • 【鸿蒙开发】Hi3861学习笔记- GPIO
  • Android 滑块开关 自定义Switch
  • 解决Element UI的el-date-picker组件默认值为当天日期但选择后不回显的问题
  • 每天一道算法题【蓝桥杯】【在排序数组中查找元素的第一个位置和最后一个位置】
  • 【MySQL篇】MySQL基本查询详解
  • 【推荐项目】Java的廊坊城市公交查询网站
  • 光谱相机检测肉类新鲜度的原理
  • 查看端口被占用命令
  • VMware安装Windows server 2016