Python version : 3.7.10
Pandas version : 1.1.5
특정 열을 행 인덱스로 설정(set_index())
set_index()
메소드를 사용하여 데이터 프레임의 특정 열을 행 인덱스로 설정할 수 있습니다.
원본 객체를 바꾸지 않고 새로운 객체를 반환하는 점에 유의합시다.
만약 원래 객체를 변경하고 싶다면 옵션을 통해 설정이 가능합니다.
exam_data = {
'이름' : ['서준', '예린', '지은'],
'수학' : [90, 80, 70],
'영어' : [95, 89, 90],
'음악' : [95, 80, 100],
'체육' : [100, 90, 90]
}
exam_df = pd.DataFrame(exam_data)
위와 같은 데이터에서 특정 열을 행 인덱스로 설정해봅시다.
exam_indexed_name_df = exam_df.set_index('이름')
print("특정 열을 인덱스로 설정")
print(exam_indexed_name_df)
print('\n')
'이름'
열을 행 인덱스로 설정하기 위해서 set_index('이름')
괄호 안에 '이름'을 넣은 것을 알 수 있습니다.
만약 원본 객체를 변경하고 싶다면 inplace=True
옵션을 지정해주면 됩니다.
2개의 열을 행 인덱스로 지정할 수도 있습니다.
print("여러 열을 인덱스로 설정")
exam_indexed_name_df2 = exam_df.set_index(['음악', '수학']) #index가 두 개 멀티인덱스(MultiIndex)라고 한다.
print(exam_indexed_name_df2)
print('\n')
set_index(['음악', '수학'])
와 같이 괄호 안에 리스트로 원하는 열을 지정해주면 됩니다.
행 인덱스 재배열(reindex())
reindex()
메소드를 사용하면 데이터프레임의 행 인덱스를 새로운 리스트로 재지정할 수 있습니다.
마찬가지로 새로운 객체를 반환합니다.
기존 데이터프레임에 존재하지 않는 행 인덱스가 추가되는 경우 데이터 값은 NaN
이 됩니다.
dict_data = {
'c0' : [ 1, 2, 3],
'c1' : [ 4, 5, 6],
'c2' : [ 7, 8, 9],
'c3' : [10, 11, 12],
'c4' : [13, 14, 15]
}
dict_df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
print("reindex 사용")
new_index = ['r0', 'r1', 'r2', 'r3', 'r4']
new_dict_df = dict_df.reindex(new_index)
print(new_dict_df)
행 인덱스로 지정할 new_index
리스트를 만든 후 reindex()
메소드를 통해 행 인덱스를 재지정 했습니다.
이때 'r3
과 r4
행의 데이터는 없기 때문에 NaN
이 됩니다.NaN
값을 없애기 위해서는 fill_value
옵션을 사용하여 값을 채워줄 수 있습니다.
print("NaN 방지를 위해 fill_value = 0 옵션 사용")
new_dict_df2 = dict_df.reindex(new_index, fill_value=0)
print(new_dict_df2)
fill_value=0
으로 설정하는 것으로 NaN
대신 0
으로 값이 채워지게 됩니다.
행 인덱스 초기화(reset_index())
reset_index()
메소드를 활용하여 행 인덱스를 정수형 위치 인덱스로 초기화할 수 있습니다. 이때 기존 행 인덱스는 열로 이동합니다.
dict_data = {
'c0' : [ 1, 2, 3],
'c1' : [ 4, 5, 6],
'c2' : [ 7, 8, 9],
'c3' : [10, 11, 12],
'c4' : [13, 14, 15]
}
dict_df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
#원래 index는 열로 이동
reseted_df = dict_df.reset_index()
print(reseted_df)
위 코드에서는 dict_data
를 이용하여 dict_df
를 만들 때 다른 배열을 행 인덱스로 지정해줍니다.
그 후 reset_index()
메소드를 활용해 행 인덱스를 정수형 위치 인덱스로 리셋할 수 있는 것을 보여줍니다.
행 인덱스를 기준으로 데이터프레임 정렬(sort_index())
sort_index()
메소드를 활용하여 행 인덱스를 기준으로 데이터프레임의 값을 정렬할 수 있습니다.ascending
옵션을 사용하여 오름차순과 내림차순을 지정할 수 있습니다.ascending=False
일 때 내림차순, ascending=True
일 때 오름차순으로 설정 가능합니다.
dict_data = {
'c0' : [ 1, 2, 3],
'c1' : [ 4, 5, 6],
'c2' : [ 7, 8, 9],
'c3' : [10, 11, 12],
'c4' : [13, 14, 15]
}
dict_df = pd.DataFrame(dict_data, index=['r1', 'r0', 'r2'])
다음 코드는 각각 행 인덱스를 기준으로 오름차순과 내림차순으로 정렬하는 방법입니다.
print("오름차순으로 정렬")
sorted_df = dict_df.sort_index(ascending=True)
print(sorted_df)
print('\n')
print("내림차순으로 정렬")
sorted_df2 = dict_df.sort_index(ascending=False)
print(sorted_df2)
print('\n')
특정 열의 데이터 값을 기준으로 데이터프레임 정렬(sort_value())
위에서는 행 인덱스를 기준으로 데이터프레임을 정렬했다면 이번엔 열의 데이터를 기준으로 정렬하는 방법입니다.sort_value()
메소드를 사용하여 정렬할 수 있습니다.
인덱스가 기준일 땐 sort_index()
값이 기준일 땐 sort_value()
로 기억하면 될 것 같습니다.
dict_data = {
'c0' : [ 1, 2, 3],
'c1' : [ 4, 5, 6],
'c2' : [ 7, 8, 9],
'c3' : [10, 11, 12],
'c4' : [13, 14, 15]
}
dict_df = pd.DataFrame(dict_data, index=['r1', 'r0', 'r2'])
c1
열의 데이터 값을 기준으로 오름차순으로 정렬하는 방법입니다.
print("c1을 기준으로 오름차순 정렬")
sorted_df = dict_df.sort_values(by = 'c1', ascending=True)
print(sorted_df)
print('\n')
Reference
도서 [파이썬 머신러닝 판다스 데이터 분석]을 공부하며 작성했습니다.
'AI > Pandas' 카테고리의 다른 글
04. 산술 연산(연산 메소드) (0) | 2021.04.25 |
---|---|
02. 자료구조 - 데이터프레임(Data Frame) (0) | 2021.04.19 |
01. 자료구조 - 시리즈 (0) | 2021.04.17 |
00. 판다스 시작하기 (0) | 2021.04.17 |