# pysqldf

`pysqldf` allows you to query `pandas` DataFrames using SQL syntax.
It works similarly to `sqldf` in R.
`pysqldf` seeks to provide a more familiar way of manipulating and cleaning data for people new to Python or `pandas`.

## Installation

`$ pip install pysqldf`

## Basics

The main class in pysqldf is `SQLDF`. `SQLDF` accepts 1 enviroment variable sets or more parametrs in constructor.
   - an set of session/environment variables (dictionary of valiables, `locals()` or `globals()`)
   - temporary file type
   - user defined functions
   - user defined aggregate functions

`pysqldf` uses [SQLite syntax](http://www.sqlite.org/lang.html).
Any convertable data to `pandas` DataFrames will be automatically detected by `pysqldf`.
You can query them as you would any regular SQL table.


```
$ python
>>> from pysqldf import SQLDF, load_meat, load_births
>>> sqldf = SQLDF(globals())
>>> meat = load_meat()
>>> births = load_births()
>>> print sqldf.execute("SELECT * FROM meat LIMIT 10;").head()
                  date  beef  veal  pork  lamb_and_mutton broilers other_chicken turkey
0  1944-01-01 00:00:00   751    85  1280               89     None          None   None
1  1944-02-01 00:00:00   713    77  1169               72     None          None   None
2  1944-03-01 00:00:00   741    90  1128               75     None          None   None
3  1944-04-01 00:00:00   650    89   978               66     None          None   None
4  1944-05-01 00:00:00   681   106  1029               78     None          None   None
```

joins and aggregations are also supported
```
>>> q = "SELECT m.date, m.beef, b.births FROM meat m INNER JOIN births b ON m.date = b.date;"
>>> print sqldf.execute(q).head()
                    date    beef  births
403  2012-07-01 00:00:00  2200.8  368450
404  2012-08-01 00:00:00  2367.5  359554
405  2012-09-01 00:00:00  2016.0  361922
406  2012-10-01 00:00:00  2343.7  347625
407  2012-11-01 00:00:00  2206.6  320195

>>> q = "SELECT strftime('%Y', date) AS year, SUM(beef) AS beef_total FROM meat GROUP BY year;"
>>> print sqldf.execute(q).head()
   year  beef_total
0  1944        8801
1  1945        9936
2  1946        9010
3  1947       10096
4  1948        8766
```

## Documents

### toplevel exports

#### `SQLDF`

#### `load_meat`, `load_births`

## test

`$ nosetests -s -v`
