Piper
Piper is a python package to help simplify data wrangling tasks with pandas. It provides a set of wrapper functions or 'verbs' that provide a simpler interface to standard Pandas functions.
Piper functions accept and receive pandas dataframe objects. They can be used as standalone functions but are more powerful when used together in a Jupyter notebook cell to form a data pipeline.
Instead of the traditional the 'dot notation' or method calling technique from within an object, piper receives and passes on the dataframe object between functions using the piper magic command link operator (that is '>>') within a cell. So, in traditional pandas, to see the first 5 rows of a dataframe:
df.head()
The equivalent in piper would be:
%%piper
df >> head()
Installation
To install the package, enter the following:
pip install dpiper
Documentation
Piper API documentation available at readthedocs
Quick start
Example #1
A dataframe consisting of two columns A and B.
import pandas as pd
import numpy as np
np.random.seed(42)
df = pd.DataFrame({'A': np.random.randint(10, 1000, 10),
'B': np.random.randint(10, 1000, 10)})
df.head()
| A | B | |
|---|---|---|
| 0 | 112 | 476 |
| 1 | 445 | 224 |
| 2 | 870 | 340 |
| 3 | 280 | 468 |
| 4 | 116 | 97 |
Piper equivalent
from piper.defaults import *
%%piper
df >> assign(C = lambda x: x.A + x.B,
D = lambda x: x.C < 1000)
>> where("~D")
| A | B | C | D | |
|---|---|---|---|---|
| 2 | 870 | 340 | 1210 | False |
| 8 | 624 | 673 | 1297 | False |
Example #2
Suppose you need the following function to trim columnar text data.
def trim_columns(df):
''' Trim blanks for given dataframe '''
str_cols = df.select_dtypes(include='object').columns
for col in str_cols:
df[col] = df[col].str.strip()
return df
import pandas as pd
from piper.factory import sample_data
df = sample_data()
# Select all columns EXCEPT 'dates'
subset_cols = ['order_dates', 'regions', 'countries', 'values_1', 'values_2']
criteria1 = ~df['countries'].isin(['Italy', 'Portugal'])
criteria2 = df['values_1'] > 40
criteria3 = df['values_2'] < 25
df2 = (df[subset_cols][criteria1 & criteria2 & criteria3]
.pipe(trim_columns)
.sort_values('countries', ascending=False))
df2.head()
Piper equivalent
Using the %%piper magic function, piper verbs can be combined with standard python functions.
from piper.defaults import *
%%piper
sample_data()
>> trim_columns()
>> select('-dates')
>> where(""" ~countries.isin(['Italy', 'Portugal']) &
values_1 > 40 &
values_2 < 25 """)
>> order_by('-countries')
>> head(5)
Result:
| dates | order_dates | countries | ids | values_1 | values_2 |
|---|---|---|---|---|---|
| 2020-03-03 | 2020-03-09 | Sweden | E | 194 | 20 |
| 2020-05-02 | 2020-05-08 | Sweden | D | 322 | 14 |
| 2020-01-20 | 2020-01-26 | Spain | A | 183 | 20 |
| 2020-02-01 | 2020-02-07 | Norway | D | 344 | 21 |
| 2020-05-06 | 2020-05-12 | Norway | B | 135 | 21 |
Release files for dpiper 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dpiper-0.1.2.tar.gz | 82.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dpiper-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 173.6 kB
Release files / dpiper-0.1.2.tar.gz
| Download URL | dpiper-0.1.2.tar.gz |
|---|---|
| Size | 82.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1b4526e42289006c6c8d5c2cbff2c17be830aed0c9aef252d3e9827e5ab86eaa
|
|
BLAKE2b-256 checksum How to use checksums |
e240a14afdb8f926a212c78e540a8c4b35fd21aecbde663faf75617cd2d8452f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.23.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.5
|
Release files / dpiper-0.1.2-py3-none-any.whl
| Download URL | dpiper-0.1.2-py3-none-any.whl |
|---|---|
| Size | 91.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a2db1f6dd8b716c1d76aeede0e2dfb66d6b99e46f3c848f00fa5d7c38bce2794
|
|
BLAKE2b-256 checksum How to use checksums |
682291851f88b5b39622254d9d7eeafffbc3a47ecca994ebf2f9d81b56b17373
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.23.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.5
|