본문 바로가기

Programming/python

pandas 다양한 인덱싱 활용법

728x90
반응형

판다스에서는 다양한 함수나 연산으로 인덱싱/슬라이싱이 가능하다.

 

대표적인 함수의 예로는 

 

인덱스의 구체적인 이름을 활용한 loc함수, 만약 구체적인 인덱스의 이름을 모를 때 해당 인덱스의 넘버를 사용하는 iloc함수, 또는 조건으로 값을 찾아내는 쿼리 함수와 masking 연산 등이 있다.

 

 


 

 

우선 loc 함수를 사용해보자

 

 

loc 함수

 

 

import pandas as pd

shopping_list = { 
    'name': ['shampoo', 'ramen', 'beer', 'eggs'],
    'price': [12000, 600, 2500, 50],
    'quantity': ['1', '5', '4', '30']
}
 
shopping_list = pd.Series(shopping_list)

# loc
print(shopping_list.loc['name'], '\n')
print(shopping_list.loc['price':'quantity'], '\n')

 

시리즈 형태의 데이터인 shopping_list에서 만약 내가 name인덱스에 있는 값들만 가지고 오고 싶다면 첫 번째 출력문처럼

아니면 name 인덱스를 제외하고 가격과 수량의 인덱스의 값들만 가져오고 싶다면 2번째 출력문처럼 작성하면 된다.

 

결과:

['shampoo', 'ramen', 'beer', 'eggs'] 

price       [12000, 600, 2500, 50]
quantity             [1, 5, 4, 30]
dtype: object 

 

 

iloc 함수

 

 

근데 만약 내가 인덱스의 구체적인 이름을 모른다 싶을 때는 숫자를 활용할 수 있다.

 

import pandas as pd

shopping_list = { 
    'name': ['shampoo', 'ramen', 'beer', 'eggs'],
    'price': [12000, 600, 2500, 50],
    'quantity': ['1', '5', '4', '30']
}
 
shopping_list = pd.Series(shopping_list)

# iloc
print(shopping_list.iloc[0], '\n')
print(shopping_list.iloc[1:3], '\n')

 

shopping_list의 0번째 인덱스(name)만 출력하고 싶다면 첫 번째 출력문처럼

shopping_list의 1번째 인덱스부터 2번째까지 출력하고 싶다면 두 번째 출력문처럼 작성하면 된다.

 

결과:

['shampoo', 'ramen', 'beer', 'eggs'] 

price       [12000, 600, 2500, 50]
quantity             [1, 5, 4, 30]
dtype: object 

 

 

masking 연산과 query 함수

 

 

만약 내가 조건을 활용해 price인덱스에 존재하는 값들 중 10000원 이하의 값만 출력하고 싶다면 masking연산과 query함수를 사용하면 된다.

 

import pandas as pd

shopping_list = { 
    'name': ['shampoo', 'ramen', 'beer', 'eggs'],
    'price': [12000, 600, 2500, 50],
    'quantity': ['1', '5', '4', '30']
}
 
shopping_list = pd.Series(shopping_list)


# masking 연산과 query 함수를 사용하기 위해 DataFrame으로 변환
shopping_list = pd.DataFrame({
    'name': shopping_list['name'],
    'price': shopping_list['price'],
    'quantity': shopping_list['quantity']
})

# 주의할 점은 masking연산과 query 함수는 데이터 프레임 형태의 데이터의 값만 불러올 수 있음. 시리즈로 하면 오류.
# masking 연산으로 price 열에서 10000미만 품목 출력
print(shopping_list[shopping_list['price'] < 10000], '\n')

#query 함수로 price 열에서 10000미만 품목 출력
print(shopping_list.query('price < 10000'))

 

masking연산으로 조건을 주고 싶다면 첫 번째 출력문처럼 

query함수로 조건을 주고 싶으면 두 번째 출력문처럼 작성하면 된다.

 

*주석에도 달아놨지만 주의할 점은 masking연산과 query함수의 사용은 DataFrame에서만 지원하기 때문에 Series데이터로는 불가능하다.

 

결과:

 

    name  price quantity
1  ramen    600        5
2   beer   2500        4
3   eggs     50       30 

    name  price quantity
1  ramen    600        5
2   beer   2500        4
3   eggs     50       30

 

 

끗!

728x90
반응형