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을 이용한 데이터 조회 및 조건부 입력를 알아봤습니다.
'코딩TIPS' 카테고리의 다른 글
[seaborn] lineplot 그래프 그리기 (4) | 2022.10.31 |
---|---|
[Python] DataFrame groupby 사용하기 (4) | 2022.10.30 |
[Python] dataframe의 pivot_table (4) | 2022.10.25 |
[Python] DataFrame concat 으로 합치기(병합) (4) | 2022.10.18 |
[Python] DataFrame Column Type 확인 및 변경 (4) | 2022.10.17 |