[미래유망] 판다스(데이터 프레임) #09 축 및 레이블

돼지인간·2025년 4월 17일

미래유망

목록 보기
20/41
post-thumbnail

행↔열 교환 (swapaxes)

swapaxes메서드는 행/열을 바꿔주는 메서드입니다. 값들도 교환됩니다.

사용법
df.swapaxes(axis1, axis2, copy=True)
axis1, axis2 : {0 : index / 1 : columns} 교환할 행과 열 입니다.
copy : 사본을 생성할지 여부입니다.

먼저 2x2짜리 객체를 만들어보겠습니다.

idx = ['row1','row2']
col = ['col1','col2']
data= [['A','B'],[1,2]]
df = pd.DataFrame(data, idx, col)
print(df)

기본적인 사용법

axis1과 axis2에 행/열을 지정하여 교환할 수 있습니다. 행<->열 교환이나 열<->행 교환이나 완벽히 동일합니다.

axis1과 axis2이 같다면, 당연히 원래 값과 같습니다.


레이블명 변경 (rename)

rename 메서드는 레이블의 이름을 변경하는 메서드 입니다.

사용법
df.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='ignore')
mapper : 변경할 {레이블명 : 값} 입니다. dict나 함수형태가 올 수 있는데, 축이 지정되어있지 않으므로 axis인수와 함께 사용해야 합니다.
axis : mapper의 변경값이 적용될 축 입니다.
index, columns : 변경할 {레이블명 : 값}입니다. 미리 축을 지정하기 때문에 axis인수와 병행사용할 수 없습니다.
copy : 사본을 생성할지 여부입니다.
inplace : Pandas 공통 인수인 inplace는 원본을 수정할지의 여부를 지정합니다.
level : Multi Index의 경우 레벨을 지정해줍니다.
errors : {'ignore' / 'raise'} mapper, index, columns에서 지정한 dict에 해당하는 key값이 없을경우, 오류를 발생시킬지 여부 입니다.

먼저 2x2짜리 객체를 만들어보겠습니다. 레이블명 변경 관련 메서드이므로 보기 쉽게 값들은 전부 하이픈으로 하겠습니다.

data= [['-','-'],['-','-']]
df1 = pd.DataFrame(data)
print(df1)

mapper와 axis를 이용하는 방법

mapper를 이용해 변경 내용을 설정해준 경우, axis인수를 이용해 적용 축을 설정해주어야합니다.

index나 columns를 이용하는 방법

index나 columns에 변경 내용을 설정해주는 경우 axis설정 없이 적용이 됩니다.

inplace인수를 이용한 원본 변경

pandas 공통사항으로 inplace=True인 경우 원본의 값이 변경됩니다.


Multi Index의 경우(레이블명 변경)

먼저 예시를 위한 Multi Index를 만들어 보겠습니다

idx = [['row1','row1','row2','row2'],[1,2,3,4]]
col = ['col1','col2']
data = [['-','-'],['-','-'],['-','-'],['-','-']]
df2 = pd.DataFrame(data, idx, col)
print(df2)

level의 지정

Multi Index의 경우 rename으로 레이블명을 변경할 경우 level을 통해 레벨을 설정해주어야 합니다.

레벨1 의 인덱스가 변경된 것을 확인할 수 있습니다. 그런데 { ... , 5:'val5'}는 존재하지 않는 인덱스인데, 오류가 발생하지 않았습니다.

errors인수의 사용

errors는 기본적으로 ignore으로 존재하지 않은 인덱스에 대해 dict를 입력하더라도 오류를 발생시키지 않습니다.
위의 예시를 errors='raise'를 이용하여 다시 실행해보겠습니다.


축 이름 변경 (rename_axis)

rename_axis메서드는 축의 이름을 지정하는 메서드입니다.

사용법
df.rename_axis(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False)
mapper : 변경할 값 입니다. dict나 함수, 스칼라형태가 올 수 있는데, 축이 지정되어있지 않으므로 axis인수와 함께 사용해야 합니다.
axis : mapper의 변경값이 적용될 축 입니다.
index, columns : 변경할 축을 지정해서 값을 변경합니다.
copy : 사본을 생성할지 여부입니다.
inplace : Pandas 공통 인수인 inplace는 원본을 수정할지의 여부를 지정합니다.

먼저 2x2짜리 객체를 만들어보겠습니다. 축 이름 변경 관련 메서드이므로 보기 쉽게 값들은 전부 하이픈으로 하겠습니다.

df = pd.DataFrame(data=[['-','-'],['-','-']],index=['row1','row2'],columns=['col1','col2'])
print(df)

mapper와 axis를 이용하는 방법

mapper를 통해 변경값을 지정해주는 경우 axis를 통해 적용될 축을 지정해주어야 합니다.

index나 columns를 이용하는 경우

index나 columns에 값을 지정해주는경우 별도의 축을 지정해줄 필요가 없습니다.

inplace의 사용

pandas 공통사항으로 inplace=True인 경우 원본을 변경하게 됩니다. 지정해준 축 이름을 대문자로 변경하는 함수와 함께 inplace를 사용해보겠습니다.


레이블명 변경 (set_axis)

set_axis메서드는 레이블명을 원하는 값으로 변경하는 메서드입니다.

사용법
df.set_axis(labels, axis=0, inplace=False)
labels : 변경할 이름입니다. list형태로 사용 가능합니다.
axis : {0 : index / 1 : columns} 변경값을 적용할 축 입니다.
inplace : pandas 공통인수인 inplace는 True인 경우 원본을 변경하게 됩니다.

먼저 2x2 짜리 DataFrame 객체를 만들겠습니다.

df = pd.DataFrame(data=[[1,2],[3,4]])
print(df)

기본적인 사용법

labels에 변경할 값을 입력하고, axis를 통해 축을 설정해주어서 레이블명을 변경할 수 있습니다.


열을 인덱스로 설정 (set_index)

set_index메서드는 기존의 열을 인덱스로 설정하는 메서드입니다.

사용법
df.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
keys : 인덱스로 설정할 열의 이름입니다. list형태로 설정할 경우 Multi Index로 설정됩니다.
drop : 인덱스로 설정한 열을 기존 열에서 제거할지 여부입니다. 기본값은 True로 열에서 제거됩니다.
append : 기존 인덱스를 유지하면서 새 인덱스를 추가할 지 여부입니다.
inplace : pandas 공통 인수로 원본을 대체할지 여부입니다.
verify_integrity : 추가하려는 인덱스에 중복값이 있을경우 오류를 띄울지 여부 입니다.

먼저 5x4 짜리 DataFrame 객체를 만들겠습니다.

data={'col1':['A','A','A','B','B'],
      'col2':['[1]','[2]','[3]','[1]','[2]'],
      'col3':[2,5,3,4,1],
      'col4':['X','X','Y','Z','Z']}
idx=['row1','row2','row3','row4','row5']
df = pd.DataFrame(data=data,index=idx)
print(df)

기본적인 사용법

keys로 인덱스가 될 열 이름을 지정할 수 있습니다.

keys에 list가 입력될 경우 Multi Index 형태로 설정이 됩니다.

append 인수의 사용

append인수를 True로 설정 할 경우 기존 Index를 유지하고 새 인덱스를 추가하게됩니다.

drop 인수의 사용

drop 인수가 False일 경우 인덱스가 설정된 이후에도 해당 열이 유지됩니다.
기본값은 True로 keys에 설정된 열이 인덱스로 설정될 경우 열이 삭제됩니다.

verify_integrity인수의 사용

verify_integrity인수의 기본값은 False로 인덱스에 중복된 값이 있더라도 출력합니다. 만약 True일 경우 중복값이 있다면 오류를 출력하게 됩니다.


접미사/접두사 (suffix / prefix)

add_suffix와 add_preffix메서드는 각각 열 이름에 접미사/접두사를 붙이는 메서드 입니다.

사용법
df.add_suffix(suffix)
df.add_prefix(prefix)
suffix / prefix : 열 이름에 추가할 문자열입니다.

먼저 2x2 짜리 DataFrame 객체를 만들겠습니다.

df = pd.DataFrame(data=[[1,2],[3,4]])
print(df)

기본적인 사용법

add_suffix메서드를 이용할 경우 열 이름의 뒤쪽에 해당 문자열이 붙게 됩니다.
add_prefix메서드를 이용할 경우 열 이름의 앞쪽에 해당 문자열이 붙게 됩니다.


인덱스 변경 (reindex)

reindex 메서드는 인덱스를 새 인덱스로 덮어씌우고 내용을 채우는 메서드 입니다.

사용법
df.reindex(labels=None, index=None, columns=None, axis=None,method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)
labels : 변경할 값입니다. labels인수를 이용할 경우 axis인수를 통해 축을 지정해줘야합니다. 추가된 index의 경우 NaN을 요소로 갖습니다.
index / columns : 변경할 값입니다. 행과 열을 미리 지정해줍니다. 추가된 index의 경우 NaN을 요소로 갖습니다.
method : {bfill / ffill / nearest이 결측치를 채울 규칙입니다.
copy : 사본을 생성할지 여부입니다.
level : Multi Index의 경우 레벨을 선택할 수 있습니다.
fill_value : 결측값을 이 값으로 변경할 수 있습니다.
limit : method인수를 사용할 경우 몇개까지 변경할지 제한할 수 있습니다
tolerance : method인수를 사용할 때 index가 다를 경우 허용 범위 입니다.

먼저 3x4 짜리 DataFrame 객체를 만들겠습니다.

idx = [3,6,11]
col = ['col1','col2','col3','col4']
data = [[1,2,3,4],[2,4,6,8],[3,6,9,12]]
df = pd.DataFrame(data,idx,col)
print(df)

기본적인 사용법(+fill_value인수)

기본적으로 새 index가 될 list를 형성하고 labels / axis나 index / columns를 사용해서 적용 할 수 있습니다.
labels / axis를 이용할 경우

index / columns를 이용할 경우

fill_value를 설정하면 NaN을 원하는 값으로 지정하여 변경할 수 있습니다.

method 와 limit의 사용

method를 이용하면 결측치를 앞/뒤/근처의 인덱스를 기준으로 변경이 가능합니다.
먼저 기존 열에 새 열을 reindex메서드를 이용해 추가해보겠습니다.

method='bfill'인 경우 뒤의 열의 값을 가져옵니다.

method='ffill'인 경우 앞의 열의 값을 가져옵니다.

limit는 method로 변경할 열의 갯수를 제한할 수 있습니다.

tolerance 인수의 사용

│변경 전 인덱스 - 변경 후 인덱스│≤ tolerance 를 만족하게 method 적용 허용 범위를 정할 수 있습니다.
tolerance=1인 경우

tolerance=2인 경우

tolerance=3인 경우


인덱스를 열로 변환 (reset_index)

reset_index메서드는 설정 인덱스를 제거하고 기본 인덱스(0,1,2, ... , n)으로 변경하는 메서드 입니다.

사용법
self.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
level : Multi Index의 경우 제거할 인덱스의 레벨을 설정할수 있습니다. 기본적으로 모든 레벨입니다.
drop : 제거한 인덱스를 열에 추가할지 여부입니다. 기본값은 False로 제거된 인덱스는 열로 변환됩니다.
inplace : pandas 공통 인수로, 원본을 변경할지 여부 입니다.
col_level / col_fill : Multi Index의 경우 제거된 인덱스를 열에 추가할 때 레벨과 열의 이름을 설정할 수 있습니다.
col_level을 통해 레벨을 설정하고, col_fill을통해 해당 열의 이름을 정합니다.

먼저 기본적인 사용법 예시를 위해 3x2 짜리 객체를 생성하겠습니다.

df = pd.DataFrame([[1,2],[3,4],[5,6]],['row1','row2','row3'],['col1','col2'])
print(df)

기본적인 사용법(+drop, inplace)

기본적으로 아무 인수 없이 사용하게 되면, 모든 레벨에 대해 인덱스가 제거되며, 열에 추가됩니다.

drop = True인 경우 열이 밖으로 꺼내지는게 아니라 완전히 삭제됩니다.

inplace=True인 경우 원본이 변경되게 됩니다.

Multi Index 예시(reset_index)

Multi Index의 예시를 위하여 4x4짜리 Multi Index를 하나 생성하겠습니다.

idx = [['IDX1','IDX1','IDX2','IDX2'],['row1','row2','row3','row4']]
col = [['COL1','COL1','COL2','COL2'],['val1','val2','val3','val4']]
data = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
df2 = pd.DataFrame(data,idx,col)
print(df2)

기본적인 사용법(+level)

Multi Index의 경우 level을 설정해줌으로서 제거할 인덱스의 레벨을 선택할 수 있습니다.
level을 입력하지 않은 경우 모든 index에 대해서 수행됩니다.

level=0인 경우

level=1인 경우

col_fill / col_level의 사용

col_fill을 이용하여 열로 변경되는 인덱스의 열 이름을 설정할 수 있습니다. COL0으로 설정해보겠습니다.

col_level을 이용해 열 이름의 레벨을 정할 수 있습니다. COL0을 다른 열이름에 맞게 LEVEL을 변경해보겠습니다.


멀티인덱스 레벨 변경 (reorder_levels)

reorder_levels메서드는 Multi Index에서 Index의 위치를 변경하는 메서드입니다.

사용법
df.reorder_levels(order, axis=0)
order : 새로 정렬할 인덱스 순서입니다. 리스트 형태입니다.
axis : {0 : index / 1 : columns} 순서를 적용할 축 입니다.

먼저 기본적인 사용법 예시를 위해 Multi Index 객체를 생성하겠습니다.

idx = [['IDX1','IDX1','IDX2','IDX2'],['row1','row2','row3','row4']]
col = [['COL1','COL1','COL2','COL2'],['val1','val2','val3','val4']]
data = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
df = pd.DataFrame(data,idx,col)
print(df)

기본적인 사용법

order에 리스트 형태의 level 순서를 입력하므로써 인덱스 순서의 변경이 가능합니다.

axis를 설정하여 적용될 축을 지정할 수 있습니다.


profile
안녕하세요 게임개발을 공부하고 있는 돼지인간 입니다.

0개의 댓글