① df.isna()=''
② df.loc[df.isna()]=''
③ df.fillna('')
④ df.replace(NaN,'')
df
-------A----B----C----D
0-----NaN--2.0--NaN---0
1-----3.0--4.0--NaN---1
2-----NaN--NaN--NaN---5
3-----NaN--3.0--NaN---4
①
-------A----B----C----D
0-----NaN--2.0--NaN---0
1-----3.0--4.0--NaN---1
2-----3.0--4.0--NaN---5
3-----3.0--3.0--NaN---4
②
-------A----B----C----D
0-----3.0--2.0--NaN---0
1-----3.0--4.0--NaN---1
2-----NaN--3.0--NaN---5
3-----NaN--3.0--NaN---4
③
-------A----B----C----D
0-----NaN--2.0--2.0--0.0
1-----3.0--4.0--4.0--1.0
2-----NaN--NaN--NaN--5.0
3-----NaN--3.0--3.0--4.0
④
-------A----B----C----D
0-----2.0--2.0--0.0--0.0
1-----3.0--4.0--1.0--1.0
2-----5.0--5.0--5.0--5.0
3-----3.0--3.0--4.0--4.0
-------A----B----C----D
0-----2.0--2.0--2.0--0.0
1-----3.0--4.0--4.0--1.0
2-----5.0--5.0--5.0--5.0
3-----3.0--3.0--3.0--4.0
① df.fillna(method='ffill').fillna(method='bfill')
② df.fillna(method='ffill', axis=1).fillna(method='bfill')
③ df.fillna(method='ffill').fillna(method='bfill', axis=1)
④ df.fillna(method='ffill', axis=1).fillna(method='bfill', axis=1)
① 12.. ② 123. ③ 1234 ④ 12AB
df
-----A----B
0---bat--abc
1---foo--bar
2--bait--xyz
①
-----A----B
0---new--abc
1---foo--new
2---new--xyz
②
-----A----B
0---bat--abc
1---foo--bar
2---new--xyz
③
-----A----B
0---new--abc
1---foo--new
2--newt--xyz
④
-----A----B
0---bat--abc
1---foo--bar
2---new--xyz
<풀이>
①의 df.isna() 메서드는 누라된 원소를 찾아 True와 False로 반환하는 메서드로 값을 대입할 수 없음. ②의 loc 메서드는 isna() 메서드가 반환하는 2차원 배열을 인덱스로 받을 수 없다. ④는 NaN을 표현하려면 넘파이 np.nan을 사용해야 한다.
②는 df.fillna(method='bfill')의 결과. ③은 df.fillna(method='ffill', axis=1)의 결과. ④는 df.fillna(method='bfill', axis=1)의 결과이다.
①의 결과
-------A----B----C----D
0-----3.0--2.0--NaN---0
1-----3.0--4.0--NaN---1
2-----3.0--4.0--NaN---5
3-----3.0--3.0--NaN---4
②의 결과
-------A----B----C----D
0-----3.0--2.0--2.0--0.0
1-----3.0--4.0--4.0--1.0
2-----NaN--3.0--3.0--5.0
3-----NaN--3.0--3.0--4.0
③의 결과
-------A----B----C----D
0-----2.0--2.0--0.0--0.0
1-----3.0--4.0--1.0--1.0
2-----3.0--4.0--5.0--5.0
3-----3.0--3.0--4.0--4.0
②는 df.replace(r'ba.{2}', 'new', regex=True)의 결과. ③은 df.replace(r'ba.', 'new', regex=True)의 결과. ④는 df.replace(r'.{4}','new', regex=True)의 결과이다.