In [1]:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame

In [4]:
ser1 = Series([2,np.nan,4,np.nan,6,np.nan],
             index=['Q','R','S','T','U','V'])

ser1


Out[4]:
Q    2.0
R    NaN
S    4.0
T    NaN
U    6.0
V    NaN
dtype: float64

In [3]:
ser2 = Series(np.arange(len(ser1)),
             index=['Q','R','S','T','U','V'],
             dtype=np.float64)
ser2


Out[3]:
Q    0.0
R    1.0
S    2.0
T    3.0
U    4.0
V    5.0
dtype: float64

In [5]:
Series(np.where(pd.isnull(ser1),ser2,ser1),index=ser1.index)


Out[5]:
Q    2.0
R    1.0
S    4.0
T    3.0
U    6.0
V    5.0
dtype: float64

In [6]:
# shorcut to previous command
ser1.combine_first(ser2)


Out[6]:
Q    2.0
R    1.0
S    4.0
T    3.0
U    6.0
V    5.0
dtype: float64

In [7]:
# dataframes
nan = np.nan
df_odds = DataFrame({'X':[1.,nan,3.,nan],
                     'Y':[nan,5.,nan,7.],
                     'Z':[nan,9.,nan,11.]})

In [9]:
df_evens = DataFrame({'X':[2.,4.,nan,6.,8.],
                      'Y':[nan,10.,12.,14.,16.]})

In [10]:
df_odds


Out[10]:
X Y Z
0 1.0 NaN NaN
1 NaN 5.0 9.0
2 3.0 NaN NaN
3 NaN 7.0 11.0

In [11]:
df_evens


Out[11]:
X Y
0 2.0 NaN
1 4.0 10.0
2 NaN 12.0
3 6.0 14.0
4 8.0 16.0

In [12]:
df_odds.combine_first(df_evens)


Out[12]:
X Y Z
0 1.0 NaN NaN
1 4.0 5.0 9.0
2 3.0 12.0 NaN
3 6.0 7.0 11.0
4 8.0 16.0 NaN

In [ ]: