文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在pandas中使用pipe()提升代码可读性

2024-12-03 17:56

关注

我们在利用pandas开展数据分析时,应尽量避免过于「碎片化」的组织代码,尤其是创建出过多不必要的「中间变量」,既浪费了「内存」,又带来了关于变量命名的麻烦,更不利于整体分析过程代码的可读性,因此以流水线方式组织代码非常有必要。

[[350930]]

图1

而在以前我撰写的一些文章中,为大家介绍过pandas中的eval()和query()这两个帮助我们链式书写代码,搭建数据分析工作流的实用API,再加上下面要介绍的pipe(),我们就可以将任意pandas代码完美组织成流水线形式。

2.  在pandas中灵活利用pipe()pipe()

顾名思义,就是专门用于对Series和DataFrame操作进行流水线(pipeline)改造的API,其作用是将嵌套的函数调用过程改造为「链式」过程,其第一个参数func传入作用于对应Series或DataFrame的函数。

具体来说pipe()有两种使用方式,「第一种方式」下,传入函数对应的第一个位置上的参数必须是目标Series或DataFrame,其他相关的参数使用常规的「键值对」方式传入即可,就像下面的例子一样,我们自编函数对「泰坦尼克数据集」进行一些基础的特征工程处理:

  1. import pandas as pd 
  2.  
  3. train = pd.read_csv('train.csv') 
  4.  
  5. def do_something(data, dummy_columns): 
  6.     ''' 
  7.     自编示例函数 
  8.     ''' 
  9.  
  10.     data = ( 
  11.         pd 
  12.         # 对指定列生成哑变量 
  13.         .get_dummies(data, # 先删除data中指定列 
  14.                      columns=dummy_columns
  15.                      drop_first=True
  16.     ) 
  17.      
  18.     return data 
  19.  
  20. # 链式流水线 
  21.     train 
  22.     # 将Pclass列转换为字符型以便之后的哑变量处理 
  23.     .eval('PclassPclass=Pclass.astype("str")', engine='python'
  24.     # 删除指定列 
  25.     .drop(columns=['PassengerId', 'Name', 'Cabin', 'Ticket']) 
  26.     # 利用pipe以链式的方式调用自编函数 
  27.     .pipe(do_something,  
  28.           dummy_columns=['Pclass', 'Sex', 'Embarked']) 
  29.     # 删除含有缺失值的行 
  30.     .dropna() 

可以看到,在紧接着drop()下一步的pipe()中,我们将自编函数作为其第一个参数传入,从而将一系列操作巧妙地嵌入到链式过程中。

「第二种使用方式」适合目标Series和DataFrame不为传入函数第一个参数的情况,譬如下面的例子中我们假设目标输入数据为第二个参数data2,则pipe()的第一个参数应以(函数名, '参数名称')的格式传入:

  1. def do_something(data1, data2, axis): 
  2.     ''' 
  3.     自编示例函数 
  4.     ''' 
  5.  
  6.     data = ( 
  7.         pd 
  8.         .concat([data1, data2], axisaxis=axis) 
  9.     ) 
  10.      
  11.     return data 
  12.  
  13. # pipe()第二种使用方式 
  14.     train 
  15.     .pipe((do_something, 'data2'), data1=trainaxis=0

在这样的设计下我们可以避免很多函数嵌套调用方式,随心所欲地优化我们的代码~

 

来源:Python大数据分析内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯