본문 바로가기
Python/파이썬 문법

(Python) 파이썬 3.10 pandas 'ser.[pos]' 에러 (loc / iloc)

by 미니몬 2023. 12. 31.

목차

    728x90
    반응형

    Summary

    다른 일 때문에 돌려놓고 잠시 잊고 있던 파이썬 코드에서 'FutureWarning' 어쩌구 에러가 발생하는 부분이 있어서 찾아보니 

    라이브러리가 수정되는 문제였다. 바로 수정은 했으나,,, 좀 당황스러운게 불과 1년 사이에 이렇게 바뀌는데

    파이썬을 사용하는 찐 개발자들은 어떻게 관리 및 수정하는지 궁금해진다.

    (C 처럼 직접 라이브러리 만들어서 사용하는 건지 아시는분은 댓글좀요)

     

    코드는 아래처럼 가상화폐 사이트에서 가격 데이터의 이동편균을 계산하여

    추세가 UP(상승추세)/down(하락추세) 결과를 출력해주는 코드이다.

    이 계산이 잘못되면 else문으로 하락추세만 return 될 것이기 때문에 예외처리도 추가해야겠다.

    def GET_MARKET_TREND(self, ticker, price, days_short):
        ticker_bithumb = ticker.split('-')[1]
        try:
            df = fetch_data(lambda: pybithumb.get_ohlcv(ticker_bithumb))
            ma_short = df['close'].rolling(window=days_short, min_periods=1).mean()
            last_ma_short = ma_short[-2] + price
    
            trend = None
            if price > last_ma_short:
                trend = "up"
            else:
                trend = "down"
            mlog(ticker,price,last_ma_short,trend)
            return trend
        except Exception as e:
            mlog(e)
            return 0

     

    위 코드를 실행한 결과 아래와 같은 메세지가 출력된다.

     

    FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, 
    integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value 
    by position, use `ser.iloc[pos]`

     

    Series.__getitem__ 이라는 객체를 사용할 때 앞으로 값에 액세스 하기 위해서 

    ser[N] -> ser.iloc[N] 으로 사용해야 한다는 경고문이다.

    'ma_short' 변수가 pandas의 Series 객체 타입이기 때문에 발생한 것이다.

     

    수정은 간단했다. ' ma_short [-2]' -> 'ma_short.iloc[-2]' 로 변경하니 에러가 출력되지 않았다.

     

    또 하나 배웠다..

    728x90
    반응형