본문 바로가기
파이썬/파이썬 데이터프레임

파이썬 (Python) 데이터프레임 기초 강좌 #8 loc를 이용한 조건 행 추출

by 이박수 2024. 10. 1.

loc 행 추출

 

데이터프레임에서 loc를 이용하여 데이터를 추출하는 방법에 대하여 조금 더 알아보자. 지난 편에서는 loc() 함수를 이용하여 행만 추출하였지만 이번에는 loc를 이용하여 행과 열, 그리고 또 어떻게 응용할 수 있는지 방법들을 알아보도록 하겠다.

 

loc와 index의 개념

loc는 index의 값을 통하여 데이터에 접근하는 것이라고 이야기했다. index가 어떤 형태냐 따라서 정수가 될 수 있고, 문자가 될 수도 있다. 보통은 정수형태를 많이 사용한다. 우리가 엑셀 파일을 데이터프레임으로 열 때 인덱스를 지정하지 않으면 데이터프레임에서 자동으로 인덱스를 생성하는 것도 배웠을 것이다.

 

이렇게 데이터프레임에서 자동으로 생성 혹은 사용자가 직접 지정하는 인덱스는 자동으로 정렬되지 않는다. 즉, 중간에 행을 지우더라도 인덱스가 자동으로 정렬되거나 갱신되지 않은 채 그대로 유지되는 특징을 가지고 있다. 이 인덱스를 활용하는 것이 loc이다.

 

엑셀 파일을 다운로드하여서 데이터 프레임으로 열어보자

sample.xlsx
0.01MB

 

loc 행 추출

 

데이터는 위와 같이 들어가 있을 것이다. 우리는 데이터프레임으로 엑셀파일을 열어보자. 이때 인덱스를 지정하지 말고 그냥 열어보자.

import pandas as pd

df = pd.read_excel("sample.xlsx", engine="openpyxl", na_values=" ")

print(df)

loc 행 추출

 

앞에 나타난 0~9까지 숫자가 인덱스이며 이는 데이터프레임에서 자동으로 할당되는 인덱스이다.

이때 행을 추가하거나 지우더라도 저 인덱스는 유지된다. 자동으로 정렬되지 않음을 우린 이미 다룬 적 있다.

 

이제 loc를 다양하게 응용해 보자.

 

loc를 이용한 특정 행 추출

 

인덱스를 기준으로 0~4번까지 5개의 행을 한번 추출해 보자.

import pandas as pd

df = pd.read_excel("sample.xlsx", engine="openpyxl", na_values=" ")

df = df.loc[0:4]

print(df)

loc 행 추출

 

저기에 하나의 값만 넣으면 (예를 들어 0) 행 하나만 추출되는 것이다. (다만 형태가 조금 달라진다. 이건 조금 복작하므로 따로 다루도록 하겠다)

만약 연속된 행이 아니라 0, 1, 3 이렇게 3개의 행을 추출하려면 어떻게 해야 할까?

추출하고자 하는 행을 리스트로 만들어 넣어주면 된다. 바로 이렇게

import pandas as pd

df = pd.read_excel("sample.xlsx", engine="openpyxl", na_values=" ")

df = df.loc[[0,1,3]]

print(df)

 

loc 행 추출

 

loc를 이용한 행과 열 추출

loc를 이용하여 행을 추출하는 것은 계속 다루어 왔다. 이제 열을 한번 추출해 보자. loc는 인덱스의 값을 기준으로 접근하는 것이기 때문에 열의 인덱스 값, 즉 열의 이름으로 접근하면 된다.

 

위의 예제에서 0,1,3 행의 Age, IC 열만 가져와 보자. 열하나만 가져와도 되지만 그렇게 하면 또 타입이 변경되므로 일단 두 개 이상 가져와 보자.

import pandas as pd

df = pd.read_excel("sample.xlsx", engine="openpyxl", na_values=" ")

df = df.loc[[0,1,3], ['Age','IC']]

print(df)

loc 행 추출

 

결과는 위와 같이 나올 것이다. 이처럼 loc는 인덱스의 값을 직접 지정하여 추출할 수 있기 때문에 직관적이다.

내가 지금 무슨 열과 무슨 행을 가져왔는지 코드에 보이기 때문이다.

 

아래의 이미지처럼 코드에 행과 열의 값을 직접 넣어주기 때문에 코드만 봐도 지금 무슨 행과 무슨 열을 가지고 오는지 보인다.

loc 행 추출

 

loc를 이용한 행 삭제

그렇다면 loc를 이용하여 행을 한번 삭제해 보자.

loc는 인덱스 값을 기준으로 데이터에 접근하기 때문에 인덱스를 가져올 수 도 있을 것이다.

그럼 해당 인덱스 값을 데이터프레임에서 삭제하면 될 것 같다. 그럼 인덱스 값이 1인 행을 한번 삭제해 보자.

 

import pandas as pd

df = pd.read_excel("sample.xlsx", engine="openpyxl", na_values=" ")

df = df.drop(df.index[1])

print(df)

loc 행 추출

 

인덱스 값이 1인 행을 drop() 이용하여 삭제해 보았다. 인덱스 값이 1인 행은 삭제되었고, 인덱스 자체는 갱신되지 않은 것을 알 수 있다.

 

한눈에 파악할 수 있는 데이터 셋을 가지고 있다면 눈으로 직접 보면서 loc를 이용하여 데이터에 접근, 추가, 삭제, 변경 등이 가능하다.

 

마무리

loc를 이용하여 행과 열을 추출하는 방법을 확인해 보았다. 그리고 drop()와 함께 삭제하는 방법까지 알아보았다. 이처럼 loc는 직관적이기 때문에 데이터가 작은 경우에 자주 사용하는 편이다. 하지만 데이터 개수가 1000개, 10000개가 넘어가는 순간 vscode에서 눈으로 확인하기가 어렵다. 중간이 뚝 끊어져 나오기 때문에 인덱스 값을 찾기란 쉽지 않을 것이다.

 

하지만 데이터가 작거나 전체 데이터 중 일부를 추출한 경우 loc를 이용한다면 직관적으로 접근할 수 있을 것이다.

 

난 loc를 이용도로 사용하고 있다.