简单智能管道操作员

sspipe的Python项目详细描述


DownloadsBuild StatusPyPI

简单的智能管道

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')

如果你熟悉 ^{} operator Unix的,或 ^{} operator 在r的magritr中,sspipe在python中提供了相同的功能。

安装和使用

使用pip安装sspipe:

pip install --upgrade sspipe

然后将其导入到脚本中。

fromsspipeimportp,px

整个功能 这个库由两个对象p(作为 在管道对象上调用)和px(作为管道对象的占位符)。

示例

DescriptionPython expression using ^{} and ^{}Equivalent python code
Simple
function call
^{}^{}
^{}
Function call
with extra args
^{}^{}
^{}
Explicitly positioning
piped argument
with ^{} placeholder
^{}^{}
^{}
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__运算符。此对象保持funcargskwargs直到 当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())

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JPA。Eclipselink没有为mySQL提供密码,但它应该提供   我的Servlet和@FormDataParam存在java问题   java将什么作为上下文参数传递到文件I/O方法中?   如果两个值相同,java无法找到其中一个单选按钮   java在变量和方法名中使用下划线   JavaSpringMVC单线程安全?   klazz类的java Arraylist(反射Api)   java如何在数字字符串中查找最频繁的数字?   JavaAPI设计:使数据更易于阅读与强制更多API调用   JavaHadoopMapReduceforGoogleWebGraph   java无法启动gauge API:Runner意外退出   java如何在bluemix上使用ibm工作负载调度器?   拉取一年中某一周特定日期的所有日期   java为什么是我的角节点。js应用程序将图像上传到S3� 邮递员正确上传时的符号?   在不使用任何第三方jar的情况下将文件从本地传输到linux系统(java代码)   java将现有文件夹复制到Eclipse工作区中新创建的项目中   Java中的regex RegExp帮助   当使用“系统”外观时,Java组合框setSelectedItem会出现故障   JavaASM:在类的方法中获取局部变量名和值