Package: pandas-ply
pandas-plyis a thin layer which makes it easier to manipulate data withpandas. In particular, it provides elegant, functional, chainable syntax in cases wherepandaswould require mutation, saved intermediate values, or other awkward constructions. In this way, it aims to movepandascloser to the “grammar of data manipulation” provided by thedplyrpackage for R.For example, take thedplyrcode below:flights%>%group_by(year,month,day)%>%summarise(arr=mean(arr_delay,na.rm=TRUE),dep=mean(dep_delay,na.rm=TRUE))%>%filter(arr>30&dep>30)The most common way to express this inpandasis probably:grouped_flights=flights.groupby(['year','month','day'])output=pd.DataFrame()output['arr']=grouped_flights.arr_delay.mean()output['dep']=grouped_flights.dep_delay.mean()filtered_output=output[(output.arr>30)&(output.dep>30)]pandas-plylets you instead write:(flights.groupby(['year','month','day']).ply_select(arr=X.arr_delay.mean(),dep=X.dep_delay.mean()).ply_where(X.arr>30,X.dep>30))In our opinion, thispandas-plycode is cleaner, more expressive, more readable, more concise, and less error-prone than the originalpandascode.Explanatory notes on thepandas-plycode sample above:pandas-ply’s methods (likeply_selectandply_whereabove) are attached directly topandasobjects and can be used immediately, without any wrapping or redirection. They start with aply_prefix to distinguish them from built-inpandasmethods.pandas-ply’s methods are named for (and modelled after) SQL’s operators. (But keep in mind that these operators will not always appear in the same order as they do in a SQL statement:SELECT a FROM b WHERE c GROUP BY dprobably maps tob.ply_where(c).groupby(d).ply_select(a).)pandas-plyincludes a simple system for building “symbolic expressions” to provide as arguments to its methods.Xabove is an instance ofply.symbolic.Symbol. Operations on this symbol produce larger compound symbolic expressions. Whenpandas-plyreceives a symbolic expression as an argument, it converts it into a function. So, for instance,X.arr > 30in the above code could have instead been provided aslambda x: x.arr > 30. Use of symbolic expressions allows thelambda x:to be left off, resulting in less cluttered code.Warningpandas-plyis new, and in an experimental stage of its development. The API is not yet stable. Expect the unexpected.(Pull requests are welcome. Feel free to contact us atpandas-ply@coursera.org.)Usingpandas-plyInstallpandas-plywith:$ pip install pandas-plyTypical use ofpandas-plystarts with:importpandasaspdfrompandas_plyimportinstall_ply,X,sym_callinstall_ply(pd)After callinginstall_ply, allpandasobjects havepandas-ply’s methods attached.API referenceFull API reference is available athttp://pythonhosted.org/pandas-ply/.Possible TODOsExtendpandas’ nativegroupbyto support symbolic expressions?Extendpandas’ nativeapplyto support symbolic expressions?Add.ply_calltopandasobjects to extend chainability?Version ofply_selectwhich supports later computed columns relying on earlier computed columns?Version ofply_selectwhich supports careful column ordering?Better handling of indices?LicenseCopyright 2015 Coursera Inc.Licensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.