본문 바로가기

코딩TIPS

[Python] DataFrame loc 원하는 조건의 데이터만 조회

반응형

DataFrame의 loc 을 이용해 원하는 조건의 데이터만 조회해 보겠습니다.

 

데이터 수집

finance datareader를 이용해 삼성전자 2022-09-01~09-30 데이터를 수집했습니다.

import pandas as pd
import FinanceDataReader as fdr
from IPython.display import display

code='005930'
startdate='2022-09-01'
enddate='2022-09-30'
df=fdr.DataReader(code,startdate,enddate)

데이터 확인이 됩니다.

 

loc 사용

Pandas의 API Reference의 내용입니다.

 

df.loc[검색어]로 검색시에는 df.index 내의 검색어에 해당하는 결과를 보여줍니다.

df.loc['2022-09-02']

DataFrame에서 아래의 결과를 가져오는 형태가 되겠죠.

 

복수개의 index를 조회할때는 df.loc[[검색어1, 검색어2]] 로 리스트형태인 [검색어1, 검색어2]가 들어갑니다.

df.loc[['2022-09-02', '2022-09-06']]

아래의 이미지가 됩니다.

 

 Column을 가져올때는 df.loc[:, column명] 또는 df.loc[:, [column명들]] 형태로 하시면 됩니다.

차이점은 전자는 1개의 column에 대해서만 사용이 가능하면 Series를 Return합니다.

후자는 1개의 column이상시 사용이 가능하며 DataFrame을 Return합니다.

비교해보겠습니다.

print(type(df.loc[:,'Close']))
display(df.loc[:,'Close'])

print(type(df.loc[:,['Close']]))
display(df.loc[:,['Close']])

 

df.loc[:,['Open','High','Close']]

이런 이미지가 되겠습니다.

 

2022-09-06과 2022-09-08의 Close 데이터만 가져오겠습니다.

저는 Series보다는 DataFrame을 선호하기 때문에 ['Close']로 조회 했습니다.

df.loc[['2022-09-06','2022-09-08'], ['Close']]

이런 이미지 겠죠.

 

 

반응형

 

 

그럼 이제 조건을 넣어서 조회해 보겠습니다.

df.loc[조건, column명] 으로 조회가 가능합니다.

Close Column의 값이 58000이상이 데이터만 조회하겠습니다.

df.loc[df['Close']>58000,:]

 

두개의 조건을 넣을때는 어떻게 될까요.

df[(조건1) & (조건2), :] 의 형태가 됩니다.

주의하실 점은 조건들에는 괄호 ()가 있어야 에러가 발생하지 않습니다.

&는 AND, | 는 OR 조건이 되겠습니다.

그럼 Close가 56000이상 57000이하의 데이터만 조회해 보겠습니다.

df.loc[(df['Close']>=56000) & (df['Close']<=57000),:]

 

 

마지막으로 원하는 조건의 데이터의 조회 후 입력하는 방법을 알아보겠습니다.

우선 test할 column하나를 만들었습니다.

df['test']=0

test Column에는 Close Data가 57000이상이면 1 57000이하이면 2를 입력하겠습니다.

df.loc[조건, 데이터입력column]의 형태가 되겠습니다.

df.loc[df['Close']>=57000,'test']=1
df.loc[df['Close']<=57000,'test']=2
df

Close와 test를 비교해보시면 결과가 잘 입력된것을 알수 있습니다.

 

이상으로 DataFrame의 loc을 이용한 데이터 조회 및 조건부 입력를 알아봤습니다.

반응형