In [1]:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
In [6]:
# いくつかサンプルになるデータを作ります。
ser1 = Series([2,np.nan,4,np.nan,6,np.nan],
           index=['Q','R','S','T','U','V'])

# 長さを同じにします。
ser2 = Series(np.arange(len(ser1), dtype=np.float64),
           index=['Q','R','S','T','U','V'])
In [4]:
ser1
Out[4]:
Q     2
R   NaN
S     4
T   NaN
U     6
V   NaN
dtype: float64
In [7]:
ser2
Out[7]:
Q    0
R    1
S    2
T    3
U    4
V    5
dtype: float64
In [10]:
# Now let's get a series where the value of ser1 is chosen if ser2 is NAN,otherwise let the value be ser1
Series(np.where(pd.isnull(ser1),ser2,ser1),index=ser1.index)
Out[10]:
Q    2
R    1
S    4
T    3
U    6
V    5
dtype: float64
In [12]:
# 同じ事を、Seriesが持つメソッドで実現できます。
ser1.combine_first(ser2)
# ser1がNaNであれば、ser2の値を使う。
Out[12]:
Q    2
R    1
S    4
T    3
U    6
V    5
dtype: float64
In [13]:
# 奇数と偶数からなるDataFrameを作ります。
dframe_odds = DataFrame({'X': [1., np.nan, 3., np.nan],
                     'Y': [np.nan, 5., np.nan, 7.],
                     'Z': [np.nan, 9., np.nan, 11.]})
dframe_evens = DataFrame({'X': [2., 4., np.nan, 6., 8.],
                     'Y': [np.nan, 10., 12., 14., 16.]})
In [14]:
dframe_odds
Out[14]:
X Y Z
0 1 NaN NaN
1 NaN 5 9
2 3 NaN NaN
3 NaN 7 11
In [15]:
dframe_evens
Out[15]:
X Y
0 2 NaN
1 4 10
2 NaN 12
3 6 14
4 8 16
In [16]:
# 先に奇数のDataFrame、NaNなら、偶数の方をとって、2つのDataFrameをつなげてみます。
dframe_odds.combine_first(dframe_evens)
Out[16]:
X Y Z
0 1 NaN NaN
1 4 5 9
2 3 12 NaN
3 6 7 11
4 8 16 NaN