본문 바로가기

컴퓨터, IT/프로그래밍

(파이썬) Pandas DataReader로 야후 스크랩핑 에러해결 (DataFrame 열이름 변경)

반응형

Pandas_DataReader 패키지를 사용해서 야후에서 종목 일봉 데이터를 받아와서

SQL로 전환시 열이름 에러가 발생합니다.

 

에러메세지

"UserWarning: The spaces in these column names will not be changed. In pandas versions < 0.14, spaces were converted to underscores. sql.to_sql("

 

1. 원인

야후에서는 수정주가를 제공해주는데 DataReader로 읽어오면,

수정주가에 해당하는 열의 이름이 Adj Close로 받아옵니다.

 

문제는 dataframe.to_sql에서는 열 이름에 공백을 권장하지 않습니다.

따라서, 무언가 빨간색의 경고메세지를 보게됩니다.

 

상기 에러 메세지가 발생하는 코드는 아래와 같습니다.

df2 = web.DataReader(ticker, "yahoo", start, end)

df2.to_sql(ticker, con2, if_exists='replace')

 

 

 

2. 해결

 

위 코드 사이에 열이름을 변경하는 코드를 넣습니다.

Adj Close를 AdjClose로 해주면 됩니다.

다른 열이름으로 변경해도 무관합니다.

 

df2 = web.DataReader(ticker, "yahoo", start, end)

df2 = df2.rename({'Adj Close':'AdjClose'},axis='columns')

df2.to_sql(ticker, con2, if_exists='replace')

 

 

 

3. 기타사항

 

개인적으로 DataReader의 사용성이 조금 떨어진다고 생각하고 있습니다.

파이썬 패키지를 이용해서 국내주식의 정보를 가져오려면 pykrx라는 잘 만들어진 패키지가 있으며,

해외주식의 경우 google finance를 이용해서 왠만한 데이터는 스프레드시트로 받아올 수 있습니다.

 

분석하거나 받아오고자 하는 데이터의 양이 많지 않다면 Google Spreadsheet (구글스프레드시트)를

이용하는게 훨씬 간편하고 빠르게 받아올 수 있습니다.

 

심지어 구글 스프레드 시트는 국내 주식의 데이터도 제공하고 있으며,

일별 시세 외에 다양한 정보를 제공중입니다.

 

기존의 엑셀이 가진 한계점을 뛰어넘어 클라우드 환경의 소프트웨어가 보편화 되고있습니다.

마이크로소프트 오피스 역시 MS365를 주력으로 내민지 꽤 오래되었으며,

구글도 발맞추어 각종 문서 편집 툴을 업그레이드 해가고 있습니다.

 

만약 분석해야될 데이터가 천~만개 정도의 데이터라면,

구글 스프레드 시트에서 googlefinance 함수를 이용해서 시도 해 보시는 것을 강력 추천합니다.

 

그럼 포스팅 마치겠습니다~!.

 

 

이미지: https://pixabay.com/images/id-3382507/