json.parseobject空值不输出_案例 | 用pdpipe搭建pandas数据分析流水线,又是你不知道的干货...

本文介绍了如何使用pdpipe库构建数据分析流水线,以TMDB 5000 Movie Dataset为例,展示了如何优雅地处理数据,包括删除列、重命名、处理缺失值等操作。pdpipe提供了如ColDrop、ColRename、DropNa等方便的工具,简化了复杂的数据处理任务,同时保持代码的简洁性和可读性。
摘要由CSDN通过智能技术生成

9eb956d33eaa33844c041d923fe2775a.png

作者:费弗里

博客地址:

https://www.cnblogs.com/feffery/p/12179647.html

说明:本文经作者授权转载,禁止二次转载

本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

在数据分析任务中,从原始数据读入,到最后分析结果出炉,中间绝大部分时间都是在对数据进行一步又一步的加工规整,以流水线(pipeline)的方式完成此过程更有利于梳理分析脉络,也更有利于查错改正。pdpipe作为专门针对pandas进行流水线化改造的模块,为熟悉pandas的数据分析人员书写优雅易读的代码提供一种简洁的思路,本文就将针对pdpipe的用法进行介绍。

2 pdpipe常用功能介绍

pdpipe的出现极大地对数据分析过程进行规范,其主要拥有以下特性:

  • 简洁的语法逻辑
  • 在流水线工作过程中可输出规整的提示或错误警报信息
  • 轻松串联不同数据操作以组成一条完整流水线
  • 轻松处理多种类型数据
  • Python编写,便于二次开发

通过pip install pdpipe安装完成,接下来我们将在jupyter lab中以TMDB 5000 Movie Dataset中的tmdb_5000_movies.csv数据集(图1)为例来介绍pdpipe的主要功能。
这是Kaggle上的公开数据集,记录了一些电影的相关属性信息,你也可以在数据科学学习手札系列文章的Github仓库对应本篇文章的路径下直接获取该数据集。

652b61c987eccd57dd0cad7a7897317a.png
图1 TMDB 5000 Movie Dataset数据集

2.1 从一个简单的例子开始

首先在jupyter lab中读入tmdb_5000_movies.csv数据集并查看其前3行(图2):

import pandas as pd
import pdpipe

# 读入tmdb_5000_movies.csv数据集并查看前3行
data = pd.read_csv('tmdb_5000_movies.csv');data.head(3)
4998cf75f372ee49a929d14942243936.png
图2

可以看出,数据集包含了数值、日期、文本以及json等多种类型的数据,现在假设我们需要基于此数据完成以下流程:

1、删除original_title
2、对title列进行小写化处理
3、丢掉vote_average小于等于7,且original_language不为en的行
4、求得genres对应电影类型的数量保存为新列genres_num,并删除原有的genres
5、丢掉genres_num小于等于5的行

上述操作直接使用pandas并不会花多少时间,但是想要不创造任何中间临时结果一步到位产生所需的数据框子集,并且保持代码的可读性不是一件太容易的事,但是利用pdpipe,我们可以非常优雅地实现上述过程:

# 以pdp.PdPipeline传入流程列表的方式创建pipeline
first_pipeline = pdp.PdPipeline([pdp.ColDrop("original_title"),
pdp.ApplyByCols(columns=['title'], func=lambda x: x.lower()),
pdp.RowDrop({ 'vote_average': lambda x: x <= 7, 'original_language': lambda x: x != 'en'}),
pdp.ApplyByCols(columns=['genres'], func=lambda x: [item['name'] for item in eval(x)].__len__(), result_columns=['genres_num']),
pdp.RowDrop({ 'genres_num': lambda x: x <= 5})])

# 将创建的pipeline直接作用于data直接得到所需结果,并打印流程信息
first_pipeline(data, verbose=True).reset_index(drop=True)

得到的结果如图3所示:

2880b0fafcfdee97d90c4dac3d679edb.png
图3

我们不仅保证了代码优雅简洁,可读性强,结果的一步到位,还自动打印出整个流水线运作过程的状态说明!
令人兴奋的是pdpipe充分封装了pandas的核心功能尤其是apply相关操作,使得常规或非常规的数据分析任务都可以利用pdpipe中的API结合自定义函数来优雅地完成,小小领略到pdpipe的妙处之后,下文我们来展开详细介绍。

2.2 pdpipe中的重要子模块

pdpipe中的API按照不同分工被划分到若干子模块,下面将针对常用的几类API展开介绍。

2.2.1 basic_stages

basic_stages中包含了对数据框中的行、列进行丢弃/保留、重命名以及重编码的若干类:

ColDrop:
  这个类用于对指定单个或多个列进行丢弃,其主要参数如下:

  • columns:字符串或列表,用于指定需要丢弃的列名
  • errors:字符串,传入 'ignore' 或 'raise',用于指定丢弃指定列时遇到错误采取的应对策略,'ignore'表示忽略异常,'raise'表示抛出错误打断流水线运作,默认为'raise'

下面是举例演示(注意单个流水线部件可以直接传入源数据执行apply方法直接得到结果),我们分别对单列和多列进行删除操作:

  • 单列删除
# 删除budget列
pdp.ColDrop(columns='budget').apply(data).head(3)

删除后得到的结果如图4:

8f5a8ede352113c6b97e148fd90c80c5.png
图4
  • 多列删除
# 删除budget之外的所有列

del_col = data.columns.tolist()
del_col.remove('budget')
pdp.ColDrop(columns=del_col).apply
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值