df의 특정 필드값 사용 방법?(어? 이게 왜 안돼죠?)

갑자기 막막해 지네요... 아직 초보지만, 데이터 프레임에서 필드와 index값으로 해당 값을 사용할 수 있었는데...

df: time, open, close, high, low 등의 필드로 구성
이때 보통 10번째 open값을 사용할땐df['open][9] 또는df.open[9] 이렇게 하면 해당 값을 추출할 수 있었던 걸로 알고 있구요..

여기서 특정시간에 맞는 행을 찾는데 까지는 어렵게 성공했음.
row = df.loc[df.time==time_x] # ===> 이렇게 해서 조건에 맞는 행 하나를 찾음.

print(row) 이렇게 출력하면 아래와 같이 출력됩니다.

                          time     open         close  ...     buy_pr       sell_pr  macd_diff
990  1645803660000  39217.0  39301.565186  ...  39169.575  39744.302763 -17.795882

여기서 open 값인 39,217.0을 추출해서 계산 등에 사용하려 하는데, 잘 안되서 우선 출력해 보니
print(row.open)

995    39217.0
Name: open, dtype: float64  
<class 'pandas.core.series.Series'>

이렇게 995 39217.0로 나오는데, type을 출력해 보면 위와 같이 시리즈라고 나오고 있습니다..

이를 아무리row.open, row.open[1], row['open'][1]등으로 추출해 봐도
39217.0만 추출이 안되고 인덱스 번호 995랑 같이 나와서 계산 등에 사용할 수가 없습니다.

왜 그럴까요? 제가 뭐 잘못 알고 있는건가요?

열공중 385

M 2022년 2월 26일 1:01 오전

목록으로
1개의 답변이 있습니다. 1 / 1 Page

여러번 시도하고 공부하다 보니 스스로 해결책을 찾았습니다.

원인은 row = df.loc[df.time==time_x]로 매칭되는 값이 여러 개가 나올 수 있어서 그런것 같습니다

<매칭 결과 값>

>>> row = df.loc[df.time==time_x]
>>> print(row)
        code        date  time  open  high   low  close  
2    A322780  2022-02-16  1423  2845  2860  2840   2860 
456  A322780  2022-02-21  1423  2920  2935  2920   2935  

<특정 값 추출 방법>
open=row.open.iloc[0] 이렇게 iloc를 통해 접근해야 되네요..

>>> row = df.loc[df.time==time_x]
>>> open=row.open.iloc[0]
>>> print(open)   
2845 

이렇게 결과가 잘 나옵니다. ^^

열공중

M 2022년 3월 1일 11:36 오전