如何在Python中模拟R的管道运算符?并实现链式操作多行显示?
在Python中模拟R的管道运算符(%>%)及多行链式操作技巧
一、模拟R的管道运算符
有几种实用方式可以实现类似R中%>%的管道操作:
1. 使用pandas内置的pipe方法
pandas的DataFrame原生支持pipe方法,可将函数串联执行,示例:
( data .pipe(lambda df: df.groupby(['sex'])) .pipe(lambda grouped: grouped.agg(avg_height=('height', 'mean'))) .pipe(lambda result: result.reset_index()) )
2. 使用pyjanitor库
pyjanitor扩展了pandas的语法,支持更贴近R的管道风格,先安装:pip install pyjanitor,示例:
import janitor # 方式一:基于pandas链式写法拆分多行 ( data .groupby(['sex']) .agg(avg_height=('height', 'mean')) .reset_index() ) # 方式二:更贴合R dplyr的语法 ( data >> janitor.groupby('sex') >> janitor.summarise(avg_height=lambda df: df['height'].mean()) )
3. 使用dfply库
dfply专门模仿R的dplyr语法,写法几乎和R一致,安装:pip install dfply,示例:
from dfply import * ( data >> group_by(X.sex) >> summarise(avg_height=X.height.mean()) )
二、拆分Python链式操作为多行
无需额外工具,只需用括号包裹整个链式操作,即可每行写一个方法调用,完美解决横向滚动问题,示例:
( data .groupby(['sex']) .agg(avg_height=('height', 'mean')) .reset_index() )
括号会告诉Python这是一个连续的表达式,不会因换行报错,同时大幅提升可读性。
内容的提问来源于stack exchange,提问作者the_data_guy
相关产品推荐
相关产品推荐

