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

파이썬 (Python) 데이터프레임 기초 강좌 #7 특정 다중 조건 행 추출

by 이박수 2024. 9. 28.

특정/다중/조건행추출

 

이번에는 loc와 iloc를 활용하여 원하는 데이터를 추출 하는 방법을 알아보려 한다. 데이터프레임의 데이터중 일부만 가져오기 위해서는 어떻게 해야하는지 구체적으로 다룰것이다. 특히 iloc와 loc 함수를 각각 이용하여 데이터를 추출 하는 방법을 비교하여 다룰것이니 각각의 사용법과 차이점을 알아보자.

 

데이터프레임 데이터 추출

방대한 데이터를 다루다보면 우리가 원하는 부분 혹은 일부 데이터만 추출하여 사용해야 하는 경우가 생긴다. 이때 우리가 원하는 데이터를 어떻게 추출해야 하는지 그 방법을 알아보려 한다.

 

먼저 엑셀 파일을 열어 데이터를 확인해보자. 아래의 파일을 다운받아서 데이터프레임으로 불러오자.

 

sample4-1.xlsx
0.01MB

 

dataframe/loc

 

우리는 불러온 데이터에서 company 행의 값이 C인 데이터만 추출해보려고 한다.

추출하는 방법은 여러가지가 있는데, 우선 가장먼저 조건을 통하여 조건에 부합되는 행만 추출하는 방법, 그리고 loc를 이용하는 방법, 마지막으로 iloc를 이용하는 방법을 통하여 데이터를 추출해보겠다.

 

데이터프레임 조건 행 추출 방법

 

데이터프레임에서 조건을 만족시키는 행만 추출하기 위해서는 먼저 조건을 어떻게 주는지 알아야 한다.

기본적으로 생각할 수 있는 조건은 company 열의 값이 C 인 것이다. company는 열이기 때문에 데이터프레임에서 열만 추출하여 C 인것을 찾아야 한다.

import pandas as pd

df = pd.read_excel("sample4-1.xlsx", engine="openpyxl", na_values=" ", index_col=0)
company_c = df[df['company']=="C"]
print(company_c)

 

dataframe/iloc

 

결과를 보면 company 열의 값이 C 인것만 추출된것을 알 수있다. 코드를 보게 되면 조금 헷갈릴 수 있다.

우선 가장 핵심인 부분은 아래의 부분이다

dataframe/iloc

 

헷갈리는 이유가 아마 df[ ] 안에 또 df[ ]가 들어가기 떄문이다. 

나는 사실 이 부분을 이해하는데 생각보다 오래 걸렸다. 늘 헷갈렸던 부분이고 그래서 추출할때 마다 구글을 찾아보곤 했다. 우선 이해를 하려고 하지말고 받아드리도록 하자. 데이터프레임에서 조건을 줄때는 반드시 df[ ] 안에 조건을 줘야 한다고 받아드리자.

 

조건을 여러개 주러면 & 연산자를 통하여 조건을 추가할 수 있다. 이때 조건은 반드시 괄고 () 로 묶어줘야 한다

import pandas as pd

df = pd.read_excel("sample4-1.xlsx", engine="openpyxl", na_values=" ", index_col=0)

company_c = df[(df['company']=="C") & (df['Age'] >2)]

print(company_c)

 

조건은 company 열 값이 C 이고, Age 열 값이 2보다 큰 값만 추출하라는 것이다.

결과는 출력해보면 제대로 나오는 것을 알 수 있다.

dataframe/iloc

 

다음은 loc를 이용하여 데이터를 추출해 보겠다.

 

데이터프레임 loc를 이용한 데이터 추출 방법

데이터프레임에서 loc는 index 열의 값을 기준으로 데이터를 접근해야한다. 계속해서 이야기하고 있는 부분이니 반드시 기억하자. 따라서 값 역시 index 열을 지정해야 하고, 조건을 줄때도 index 값을 조건으로 주어야 한다.

 

우선 간단하게 loc를 이용하여 값을 가져와 보자. 우리 데이터는 index 열이 숫자가 아닌 문자로 되어있다.

loc()

 

따라서 company 열이 C인 index는 k,l,m,n,o 이다. 이제 loc 함수를 이용하여 index가 k,l,m,n,o 인 행을 추출 해 보겠다.

import pandas as pd

df = pd.read_excel("sample4-1.xlsx", engine="openpyxl", na_values=" ", index_col=0)

company_c = df.loc['k':'o']

print(company_c)

loc()

 

위와 동일한 결과가 나온것을 알 수 있다. 다만 loc로 추출하기 위해서는 index 값을 알고 있어야 가능한 것이다.

이 상태에서 여러가지 조건을 주려면 역시나 위 의 방법처럼 df[ ]로 묶어서 조건을 줄 수 있다.

import pandas as pd

df = pd.read_excel("sample4-1.xlsx", engine="openpyxl", na_values=" ", index_col=0)

company_c = df.loc[(df['company']=='C' )&(df['Age'] > 2)]

print(company_c)

iloc

 

첫번째 예제와 비슷하게 가져와야 한다. 이렇다면 구지 loc를 쓸 필요가 있을까 하는 의문이 든다.

아무튼 loc로 데이터를 추출 하여 보았다.

 

데이터프레임 iloc를 이용한 데이터 추출

데이터프레임에서 iloc 함수는 보이지 않는 인덱스를 기준으로 한다고 하였다. 항상 시작은 0에서 시작을 하며, 행을 삭제하여도 항상 정렬된다고 하였다.

 

이렇듯 iloc로 데이터를 추출 하기 위해서 보이지 않는 인덱스 값을 알아야 한다. 대략 11에서 15일 것이다.

import pandas as pd

df = pd.read_excel("sample4-1.xlsx", engine="openpyxl", na_values=" ", index_col=0)

company_c = df.iloc[11:15]

print(company_c)

 

결과 같도 loc와 동일 한것을 알 수 있다. loc와 iloc는 사용법에 큰 차이가 없다는 것을 알 수 있다. 조건도 똑같이 주면 된다.

 

그럼 데이터를 추출할때 loc와 iloc를 꼭 사용해야 하는가? 그냥 df[ ]로 묶고 조건을 주는게 더 편하지 않는가? 

물론 그런 상황도 있지만 떄로는 loc와 iloc를 사용하는게 편할때가 있다. 

 

예를 들어 특정 행과 열을 함께 추출해야 할때는 loc와 iloc가 편하다.

 

그 이야기는 다음편에 이어서 하도록 하겠다.

 

마무리

데이터프레임에서 특정 행을 추출하는 방법을 알아보았다. 데이터프레임 자체에 조건을 준는 방법과, loc, iloc 함수를 이용하여 조건에 맞족하는 행을 추출한 것이다.

3가지 방법 모두 비슷하긴 하지만 조금씩 차이가 있다. 그 차이는 다음편에서 설명하도록 하겠다.

 

오늘도 고생했다. 꼭 위 코드를 직접 실행해보자