简单智能管道操作员
sspipe的Python项目详细描述
简单的智能管道
sspipe是一个python生产率工具,用于在python中快速处理数据。
它可以帮助您将任何复杂的表达式分解为 简单的转换,增加人类的可读性,减少 需要匹配括号!
例如,这里有一个用于读取学生数据的单行代码 从“data.csv”中,报告“a19”类中得分更高的人 比“report.csv”中的平均班级分数高:
fromsspipeimportp,pximportpandasaspdpd.read_csv('data.csv')|px[px['class']=='A19']|px[px.score>px.score.mean()].to_csv('report.csv')
另一个例子是,这里有一个用于绘制 sin(x)表示范围(0,2*pi)内cos(x)小于0的点(红色):
fromsspipeimportp,pximportnumpyasnpimportmatplotlib.pyplotaspltnp.linspace(0,2*np.pi,100)|px[np.cos(px)<0]|p(plt.plot,px,np.sin(px),'r')# The single-line code above is equivalent to the following code without SSPipe:# X = np.linspace(0, 2*np.pi, 100)# X = X[np.cos(X) < 0]# plt.plot(X, np.sin(X), 'r')
如果你熟悉
^{sspipe
在python中提供了相同的功能。
安装和使用
使用pip安装sspipe:
pip install --upgrade sspipe
然后将其导入到脚本中。
fromsspipeimportp,px
整个功能
这个库由两个对象p
(作为
在管道对象上调用)和px
(作为管道对象的占位符)。
示例
Description | Python expression using ^{ | Equivalent python code |
---|---|---|
Simple function call | ^{ | ^{ ^{ |
Function call with extra args | ^{ | ^{ ^{ |
Explicitly positioning piped argument with ^{ | ^{ | ^{ ^{ |
Chaining pipes | ^{ | ^{ ^{ ^{ ^{ |
Tailored behavior for builtin ^{ and ^{ | ^{ ^{ ^{ ^{ ^{ ^{ | ^{ ^{ ^{ ^{ ^{ |
NumPy expressions | ^{ | ^{ ^{ ^{ |
Pandas support | ^{ | ^{ ^{ |
Assignment | ^{ | ^{ ^{ ^{ |
Pipe as variable | ^{ ^{ ^{ ^{ | ^{ ^{ ^{ ^{ ^{ ^{ |
Builtin Data Structures | ^{ | ^{ ^{ |
工作原理
表达式p(func, *args, **kwargs)
返回重载的Pipe
对象
__or__
和__ror__
运算符。此对象保持func
、args
和kwargs
直到
当python调用Pipe.__ror__
时,对x | <Pipe>
的求值。然后它会评估
func(x, *args, **kwargs)
并返回结果。
px
对象只是p(lambda x: x)
。
与julienpalard/管道的兼容性
这个图书馆的灵感来源于并依赖于
JulienPalard/Pipe。如果你愿意
实现核心的单个pipe.py
脚本或轻量级库
sspipe的功能和逻辑,pipe是完美的。
SSPipe的重点是通过与
流行库和引入px
概念并重写python
运营商让管道成为一等公民。
p.<original_name>
访问,并且与sspipe兼容。
sspipe不实现任何特定的管道函数和委托
julienpalard/pipe管道函数的实现和命名。例如,julienpalard/pipe的example 求“fibonacci中所有不超过400万的偶数项之和”。 可以使用sspipe重新编写:
deffib():a,b=0,1whileTrue:yieldaa,b=b,a+bfromsspipeimportp,pxeuler2=(fib()|p.where(lambdax:x%2==0)|p.take_while(lambdax:x<4000000)|p.add())
您还可以将px
速记传递给julienpalard/pipe api:
euler2=(fib()|p.where(px%2==0)|p.take_while(px<4000000)|p.add())