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 메서드는 레이블의 이름을 변경하는 메서드 입니다.
사용법
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인수를 이용해 적용 축을 설정해주어야합니다.
index나 columns에 변경 내용을 설정해주는 경우 axis설정 없이 적용이 됩니다.
pandas 공통사항으로 inplace=True인 경우 원본의 값이 변경됩니다.
먼저 예시를 위한 Multi Index를 만들어 보겠습니다
idx = [['row1','row1','row2','row2'],[1,2,3,4]]
col = ['col1','col2']
data = [['-','-'],['-','-'],['-','-'],['-','-']]
df2 = pd.DataFrame(data, idx, col)
print(df2)
Multi Index의 경우 rename으로 레이블명을 변경할 경우 level을 통해 레벨을 설정해주어야 합니다.
레벨1 의 인덱스가 변경된 것을 확인할 수 있습니다. 그런데 { ... , 5:'val5'}는 존재하지 않는 인덱스인데, 오류가 발생하지 않았습니다.
errors는 기본적으로 ignore으로 존재하지 않은 인덱스에 대해 dict를 입력하더라도 오류를 발생시키지 않습니다.
위의 예시를 errors='raise'를 이용하여 다시 실행해보겠습니다.
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를 통해 적용될 축을 지정해주어야 합니다.
index나 columns에 값을 지정해주는경우 별도의 축을 지정해줄 필요가 없습니다.
pandas 공통사항으로 inplace=True인 경우 원본을 변경하게 됩니다. 지정해준 축 이름을 대문자로 변경하는 함수와 함께 inplace를 사용해보겠습니다.
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메서드는 기존의 열을 인덱스로 설정하는 메서드입니다.
사용법
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인수를 True로 설정 할 경우 기존 Index를 유지하고 새 인덱스를 추가하게됩니다.
drop 인수가 False일 경우 인덱스가 설정된 이후에도 해당 열이 유지됩니다.
기본값은 True로 keys에 설정된 열이 인덱스로 설정될 경우 열이 삭제됩니다.
verify_integrity인수의 기본값은 False로 인덱스에 중복된 값이 있더라도 출력합니다. 만약 True일 경우 중복값이 있다면 오류를 출력하게 됩니다.
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 메서드는 인덱스를 새 인덱스로 덮어씌우고 내용을 채우는 메서드 입니다.
사용법
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)
기본적으로 새 index가 될 list를 형성하고 labels / axis나 index / columns를 사용해서 적용 할 수 있습니다.
labels / axis를 이용할 경우
index / columns를 이용할 경우
fill_value를 설정하면 NaN을 원하는 값으로 지정하여 변경할 수 있습니다.
method를 이용하면 결측치를 앞/뒤/근처의 인덱스를 기준으로 변경이 가능합니다.
먼저 기존 열에 새 열을 reindex메서드를 이용해 추가해보겠습니다.
method='bfill'인 경우 뒤의 열의 값을 가져옵니다.
method='ffill'인 경우 앞의 열의 값을 가져옵니다.
limit는 method로 변경할 열의 갯수를 제한할 수 있습니다.
│변경 전 인덱스 - 변경 후 인덱스│≤ tolerance 를 만족하게 method 적용 허용 범위를 정할 수 있습니다.
tolerance=1인 경우
tolerance=2인 경우
tolerance=3인 경우
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 = True인 경우 열이 밖으로 꺼내지는게 아니라 완전히 삭제됩니다.
inplace=True인 경우 원본이 변경되게 됩니다.
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)
Multi Index의 경우 level을 설정해줌으로서 제거할 인덱스의 레벨을 선택할 수 있습니다.
level을 입력하지 않은 경우 모든 index에 대해서 수행됩니다.
level=0인 경우
level=1인 경우
col_fill을 이용하여 열로 변경되는 인덱스의 열 이름을 설정할 수 있습니다. COL0으로 설정해보겠습니다.
col_level을 이용해 열 이름의 레벨을 정할 수 있습니다. COL0을 다른 열이름에 맞게 LEVEL을 변경해보겠습니다.
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를 설정하여 적용될 축을 지정할 수 있습니다.