In [1]:
import pandas as pd

In [2]:
import numpy as np

In [3]:
from pandas import DataFrame, Series

In [4]:
string_data = Series(['aardvark', 'artichoke', np.nan, 'avocado'])

In [5]:
string_data


Out[5]:
0     aardvark
1    artichoke
2          NaN
3      avocado
dtype: object

In [6]:
string_data.isnull()


Out[6]:
0    False
1    False
2     True
3    False
dtype: bool

In [7]:
string_data[0] = None

In [8]:
string_data.isnull()


Out[8]:
0     True
1    False
2     True
3    False
dtype: bool

In [9]:
from numpy import nan as NA

In [10]:
data = Series([1, NA, 3.5, NA, 7])

In [11]:
data.dropna()


Out[11]:
0    1.0
2    3.5
4    7.0
dtype: float64

In [12]:
data[data.notnull()]


Out[12]:
0    1.0
2    3.5
4    7.0
dtype: float64

In [13]:
data = DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]])

In [14]:
data


Out[14]:
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3.0

In [15]:
cleaned = data.dropna()

In [16]:
cleaned


Out[16]:
0 1 2
0 1.0 6.5 3.0

In [17]:
data.dropna(how='all')


Out[17]:
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
3 NaN 6.5 3.0

In [18]:
data[4] = NA

In [19]:
data


Out[19]:
0 1 2 4
0 1.0 6.5 3.0 NaN
1 1.0 NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN 6.5 3.0 NaN

In [20]:
data.dropna(axis=1, how='all')


Out[20]:
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3.0

In [22]:
df = DataFrame(np.random.randn(7,3))

In [23]:
df


Out[23]:
0 1 2
0 -0.072462 -1.471613 0.903736
1 0.684873 -0.702079 -1.052419
2 2.007100 0.727605 -1.209503
3 -1.216099 1.317029 1.268498
4 -0.004477 -1.547473 1.757238
5 0.845278 -0.498786 0.338291
6 0.162127 0.572880 1.792272

In [24]:
df.ix[:4, 1] = NA; df.ix[:2, 2] = NA

In [25]:
df


Out[25]:
0 1 2
0 -0.072462 NaN NaN
1 0.684873 NaN NaN
2 2.007100 NaN NaN
3 -1.216099 NaN 1.268498
4 -0.004477 NaN 1.757238
5 0.845278 -0.498786 0.338291
6 0.162127 0.572880 1.792272

In [26]:
df.dropna(thresh=3)


Out[26]:
0 1 2
5 0.845278 -0.498786 0.338291
6 0.162127 0.572880 1.792272

In [27]:
df.fillna(0)


Out[27]:
0 1 2
0 -0.072462 0.000000 0.000000
1 0.684873 0.000000 0.000000
2 2.007100 0.000000 0.000000
3 -1.216099 0.000000 1.268498
4 -0.004477 0.000000 1.757238
5 0.845278 -0.498786 0.338291
6 0.162127 0.572880 1.792272

In [28]:
df.fillna({1: 0.5, 3: -1})


Out[28]:
0 1 2
0 -0.072462 0.500000 NaN
1 0.684873 0.500000 NaN
2 2.007100 0.500000 NaN
3 -1.216099 0.500000 1.268498
4 -0.004477 0.500000 1.757238
5 0.845278 -0.498786 0.338291
6 0.162127 0.572880 1.792272

In [29]:
df.fillna(0, inplace=True)

In [30]:
df


Out[30]:
0 1 2
0 -0.072462 0.000000 0.000000
1 0.684873 0.000000 0.000000
2 2.007100 0.000000 0.000000
3 -1.216099 0.000000 1.268498
4 -0.004477 0.000000 1.757238
5 0.845278 -0.498786 0.338291
6 0.162127 0.572880 1.792272

In [31]:
df = DataFrame(np.random.randn(6, 3))

In [32]:
df.ix[2:, 1] = NA; df.ix[4:, 2] = NA

In [33]:
df


Out[33]:
0 1 2
0 -1.027733 0.017606 -0.376017
1 -0.916042 0.803283 -0.802801
2 0.639076 NaN -0.300085
3 -0.536258 NaN 0.524956
4 -1.601533 NaN NaN
5 -0.823826 NaN NaN

In [34]:
df.fillna(method='ffill')


Out[34]:
0 1 2
0 -1.027733 0.017606 -0.376017
1 -0.916042 0.803283 -0.802801
2 0.639076 0.803283 -0.300085
3 -0.536258 0.803283 0.524956
4 -1.601533 0.803283 0.524956
5 -0.823826 0.803283 0.524956

In [35]:
df.fillna(method='ffill', limit=2)


Out[35]:
0 1 2
0 -1.027733 0.017606 -0.376017
1 -0.916042 0.803283 -0.802801
2 0.639076 0.803283 -0.300085
3 -0.536258 0.803283 0.524956
4 -1.601533 NaN 0.524956
5 -0.823826 NaN 0.524956

In [36]:
data = Series([1., NA, 3.5, NA, 7])

In [37]:
data.fillna(data.mean())


Out[37]:
0    1.000000
1    3.833333
2    3.500000
3    3.833333
4    7.000000
dtype: float64