리인덱싱¶
Pandas에서 리인덱싱은 Series의 데이터가 가진 index를 변경하는 동작을 수행합니다. index를 새로 생성 시 기존의 index와 동일한 shape를 만족하지 않는 경우에도 동작하며 리인덱싱을 사용하면 좀 더 유연한 방법으로 새 인덱스를 만들 수 있다.
s1 = pd.Series(np.random.rand(4), index = ['a', 'b', 'c', 'd'])
s1
s2 = s1.reindex(['a','c','i'])
s2
리인덱스를 이용하여 s2 series를 생성할 경우 기존에 s1 series가 가진 index인 'a', 'c'에 해당하는 값은 s2에 복사되었고 'i' index의 경우 s1에 값이 존재하지 않기 때문에 NaN값으로 저장되었습니다.
리인덱스는 찾을 수 없는 index값을 결측값으로 간주하고 NaN을 삽입합니다. 만일 NaN대신 다르 값을 넣는 경우 fill_value 파라메터를 이용합니다.
s3 = s1.reindex(['a', 'f'], fill_value=0)
s3
fill_value를 통해 결측값을 0으로 삽입하도록 설정한 경우 s1 series에 존재하지 않는 'f' index값이 NaN이 아닌 0의 값으로 저장된 것을 확인할 수 있습니다.
기존의 series객체의 index에 새로운 index를 설정하는 것은 기존 series의 index와 갯수가 같아야 하지만 .reindex() 메소드는 새롭게 구성하는 것이기 때문에 다양하게 활용이 가능합니다.
s_skiped = pd.Series(['red','green','blue'], index = [0,3,5])
s_skiped
0 red
3 green
5 blue
dtype: object
s_skiped series는 index가 0,3,5를 갖도록 생성되었습니다. 1,4 index값과 6 이상인 값에 대해서는 정의되어 있지 않는 상태입니다. 이렇게 결측치가 있을 때 .reindex() 메소드를 이용하여 index를 변경할 때 결측치를 채우는 방법을 제공합니다. 기본적으로 많이 사용되는 방법은 'ffill'과 'bfill'입니다.
- ffill(forward fill) : 정방향 채우기, index를 생성하는 정방향 순서에 따라서 다음 index값이 결측치 일때 이전 index정보로 결측치를 추가합니다.
s_skiped.reindex(np.arange(0,7), method = 'ffill')
0 red
1 red
2 red
3 green
4 green
5 blue
6 blue
dtype: object
.reindex()메소드를 생성하는 index에 맞는 index 1,2에 해당하는 index의 값이 기존 series에 없기 때문에 정방향 순서로 이전 index인 0번 index값인 'red'를 index 1과 index 2에 추가한 것을 확인할 수 있습니다.
여기서 주의할 점은 s_skiped series의 값은 변경된 상태가 아니며 .reindex()메소드는 복사된 새로운 series를 반환합니다. 따라서 아래와 같이 s_skiped series값을 확인하면 .reindex()를 적용전과 동일합니다.
s_skiped
0 red
3 green
5 blue
dtype: object
- bfill(barward fill) : 역방향 채우기, index를 생성하는 역방향 순서에 따라서 다은 index값이 결측치 일때 이전 index정보로 결측치를 추가합니다.
s_skiped.reindex(np.arange(0,7), method = 'bfill')
0 red
1 green
2 green
3 green
4 blue
5 blue
6 NaN
dtype: object
역방향 채우기 방식을 이용하여 결측치를 추가하는 경우 index 6의 값이 'NaN'으로 설정되었습니다. index 6의 정보를 가져올 기존 series정보가 없기 때문에 NaN으로 설정되었습니다.
s_skiped.reindex(np.arange(0,7), method = 'bfill', fill_value = 0)
0 red
1 green
2 green
3 green
4 blue
5 blue
6 0
dtype: object
만일 NaN이 아닌값으로 설정이 필요할 경우 위와 깉이 fill_value를 이용합니다. fill_value를 0으로 설정하여 index 6의 값이 0으로 추가된 것을 확인할 수 있습니다.
'Programming > Pandas' 카테고리의 다른 글
[Pandas] 모든 컬럼이 NaN일 때만 삭제하기 (0) | 2022.01.03 |
---|---|
[Pandas] 데이터프레임 로우, 컬럼 정보 확인하기 (0) | 2022.01.02 |
[Pandas] 불리언 선택 (0) | 2021.12.31 |
[Pandas] 날짜범위 index 만들기 (0) | 2021.12.26 |
[Pandas] 데이터 프레임으로 파일로딩 (0) | 2021.12.26 |