pandas is a Python library for doing
data analysis. It's really fast and lets you do exploratory work
The goal of this cookbook is to give you some concrete examples for
getting started with pandas. The docs
are really comprehensive. However, I've often had people
tell me that they have some trouble getting started, so these are
examples with real-world data, and all the bugs and weirdness
that that entails.
I'm working with 3 datasets right now
- 311 calls in New York
- How many people were on Montréal's bike paths in 2012
- Montreal's weather for 2012, hourly
It comes with batteries (data) included, so you can try out all the
examples right away.
Table of Contents
- A quick tour of the IPython Notebook
<br> Shows off IPython's awesome tab completion and magic functions.
- Chapter 1: Reading from a CSV
<br> Reading your data into pandas is pretty much the easiest thing. Even when the encoding is wrong!
- Chapter 2: Selecting data & finding the most common complaint type
<br>It's not totally obvious how to select data from a pandas dataframe. Here I explain the basics (how to take slices and get columns)
- Chapter 3: Which borough has the most noise complaints? (or, more selecting data)
<br>Here we get into serious slicing and dicing and learn how to filter dataframes in complicated ways, really fast.
- Chapter 4: Find out on which weekday people bike the most with groupby and aggregate
<br> The groupby/aggregate is seriously my favorite thing about pandas and I use it all the time. You should probably read this.
- Chapter 5: Combining dataframes and scraping Canadian weather data
<br>Here you get to find out if it's cold in Montreal in the winter (spoiler: yes). Web scraping with pandas is fun!
- Chapter 6: String operations! Which month was the snowiest?
<br> Strings with pandas are great. It has all these vectorized string operations and they're the best. We will turn a bunch of strings containing "Snow" into vectors of numbers in a trice.
- Chapter 7: Cleaning up messy data
<br> Cleaning up messy data is never a joy, but with pandas it's easier <3
- Chapter 8: Parsing Unix timestamps
<br> This is basically a quick trick that took me 2 days to figure out.
- Chapter 9 - Loading data from SQL databases
<br> How to load data from an SQL database into Pandas, with examples using SQLite3, PostgreSQL, and MySQL.
How to use this cookbook
You'll need an up-to-date version of IPython Notebook (>= 3.0) and
pandas (>=0.13) for this to work properly
You can get these using
pip install ipython pandas numpy tornado pyzmq jinja2 matplotlib jsonschema
This can be difficult to get set up and require you to compile
a whole bunch of things. I instead use and recommend
Anaconda, which is a Python distribution which
will give you everything you need. It's free and open source.
Once you have pandas and IPython, you can get going!
git clone https://github.com/jvns/pandas-cookbook.git cd pandas-cookbook/cookbook ipython notebook
A tab should open up in your browser at
Running the cookbook inside Docker container.
This repository contains Dockerfile and can be build into a docker container.
To build the container run following command from inside of the repository directory:
docker build -t jvns/pandas-cookbook .
run the container:
docker run -d -p 8888:8888 -e "PASSWORD=MakeAPassword" <IMAGE ID>
you can find out about the id of the image, by checking
You can also run the container without HTTPS by providing a flag
docker run -d -p 8888:8888 -e "PASSWORD=MakeAPassword" -e USE_HTTP=1 <IMAGE ID>
After starting the container, you can access ipython notebook with the cookbook
on port 8888. Remember to use https and authenticate with
If you see something wrong, or there's something you'd like to learn that I haven't
explained here, or there's something you know about that you would like to share,
create an issue! Send me email! Send a pull request!
- Joining dataframes
- Using stack/unstack
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License