# pd-helper
 
 A helpful package to streamline Pandas DataFrame optimization.
 
 Save 50-75% on DataFrame memory usage by running the optimizer. 
 
 Autoconfigure dtypes for appropriate data types in each column with **helper**.

 Generate a random DataFrame of controlled random variables for testing with **maker**.

## Install
 ```bash
 pip install pd-helper
 ```

## Basic Usage to Iterate over DataFrame
```python
from pd_helper.maker import MakeData 
from pd_helper.helper import optimize
faker = MakeData()

if __name__ == "__main__":
   # MakeData() generates a fake dataframe, convenient for testing
   df = faker.make_df()
   df = optimize(df)
```
## Better Usage With Multiprocessing
```python
from pd_helper.maker import MakeData 
from pd_helper.helper import optimize
faker = MakeData()

if __name__ == "__main__":
   # MakeData() generates a fake dataframe, convenient for testing
   df = faker.make_df()
   df = optimize(df, enable_mp=True)
```

## Specify Special Mappings
```python
from pd_helper.maker import MakeData 
from pd_helper.helper import optimize
faker = MakeData()

if __name__ == "__main__":
   # MakeData() generates a fake dataframe, convenient for testing
   df = faker.make_df()
   special_mappings = {'string': ['object_id'],
                       'category': ['item_name']}
   
   # special mappings will be applied instead of by optimize ruleset, they will be returned.
   df = optimize(df
                 , enable_mp=True,
                 special_mappings=special_mappings
                 )
```


## Sample Results

```bash
Starting with 175.63 MB memory.

After optmization. 

Ending with 65.33 MB memory.
```


### TODO

* Improve efficiency of iterating on DataFrame.

* Allow user to toggle logging.

* Provide tools for imputing missing data.