04-02. 레이블기반_데이터 (loc)
DataFrame.loc
loc 함수는 at 함수와 같이 레이블 기반으로 인덱싱을 합니다. DataFrame이나 Series형식으로의 반환이 필요하면 loc를 사용합니다.
개요
행/열 설정에 따라 자유로운 인덱싱이 가능합니다.
loc는 bool 배열과 함께 사용이 가능합니다.
사용법
기본 사용법
값 가져오기 : result = df.loc['행', '열']
값 설정하기 : df.loc['행', '열'] = value
입력 가능한 Input
1. 레이블 (만약 3을 입력할 경우 정수위치가 아닌 index의 레이블로 해석
2. list 객체 (예 : ['a', 'b', 'c'])
3. 레이블의 슬라이스 객체 (예 : 'b' : 'f')
4. 슬라이싱되는 축과 길이가 같은 bool 배열 (예 : [True, True, False, True])
예시
먼저, 아래와 같이 기본적인 3x3 행렬을 만듭니다.
df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], index=['row1', 'row2', 'row3'], columns=['col1', 'col2', 'col3'])
print(df)
>>
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
값 가져오기
단일 레이블을 지정할경우 Series 형태로 반환됩니다.
result = df.loc['row1']
print(result)
>>
col1 1
col2 2
col3 3
Name: row1, dtype: int64
레이블로 구성된 리스트. [ [ ] ]를 사용하면 DataFrame형태로 반환됩니다.
result = df.loc[ ['row1','row'3] ]
print(result)
>>
col1 col2 col3
row1 1 2 3
row3 7 8 9
행과 열을 설정하여 단일 레이블의 값을 입력가능합니다.
result = df.loc['row2', 'col2']
print(result)
>> 5
슬라이스를 이용하여 인덱싱을 할 수 있습니다.
result = df.loc['row1' : 'row3', 'col2']
print(result)
>>
col2
row1 1
row2 4
row3 7
Name : col2, dtype: int64
bool로 구성된 list를 이용하여 인덱싱을 할 수 있습니다.
bool = [False, True, False] # row2에 대응되는 값만 True
result = df.loc[bool]
col1 col2 col3
row2 4 5 6
bool로 구성된 Series를 반환하는 조건문의 사용도 가능합니다. 아래의 경우 col3열에 대해서 5보다 큰 경우인 row2, row3행만 반환됩니다.
result = df.loc[ df['col3'] > 5 ]
print(result)
>>
col1 col2 col3
row2 4 5 6
row3 7 8 9
여기에 해당조건을 만족하는 특정 열을 반환할 수도 있습니다. 아래의 경우 col3에서 5보다 큰 값을 만족하는 행에 대해서 col2의 값만 반환합니다.
result = df.loc[ df['col3'] > 5, ['col2'] ]
print(result)
>>
col2
row2 5
row3 8
람다함수를 이용하여 인덱싱이 가능합니다. 아래의 경우 col2의 값중 5인 값을 만족하는 행을 반환합니다.
result = df.loc[lambda df : df['col2'] == 5]
print(result)
>>
col1 col2 col3
row2 4 5 6
값 설정하기
기본적으로 조건을 만족하는 모든 항목의 값이 변경됩니다.
레이블을 지정하여 값 설정하기.
df.loc[ ['row1', 'row3'], ['col3'] ] = 'A'
print(df)
>>
col1 col2 col3
row1 1 2 A
row2 4 5 6
row3 7 8 A
하나의 레이블만 지정할 경우 해당 행/열 전체의 값 설정이 가능합니다.
df.loc[ ['row1'] ] = 'A' # 행을 변경할 경우
print(df)
>>
col1 col2 col3
row1 A A A
row2 4 5 6
row3 7 8 9
df.loc[ : , ['col3'] ] = 'B' # 열을 변경할 경우 행을 전체선택 ( : ) 해줍니다.
print(df)
>>
col1 col2 col3
row1 1 2 B
row2 4 5 B
row3 7 8 B
조건을 설정하여 만족하는 값의 변경이 가능합니다.
아래의 경우 col2에서 3보다 큰 열은 row2, row3이기 때문에 해당 열의 값이
전부 변경되었습니다.
df.loc[df['col2'] > 3] = 'A'
col1 col2 col3
row1 1 2 3
row2 A A A
row3 A A A
'파이썬완전정복-Pandas DataFrame > 04. 인덱싱' 카테고리의 다른 글
Pandas DataFrame 04-06. 뒤에서 n행 인덱싱 (tail) (0) | 2022.01.11 |
---|---|
Pandas DataFrame 04-05. 앞에서 n행 인덱싱 (head) (0) | 2022.01.11 |
Pandas DataFrame 04-04. 정수기반_데이터 (iloc) (0) | 2022.01.11 |
Pandas DataFrame 04-03. 정수기반_스칼라 (iat) (0) | 2022.01.11 |
Pandas DataFrame 04-01. 레이블기반_스칼라 (at) (0) | 2022.01.11 |