파이썬 for 반복 구문에서 데이터프레임 형태로 값을 출력하는 방법이 없을까요?

조회수 3495회

대신증권 API에서 순매매 자료를 가져오는 코드인데요. 다른 분이 작성하신 겁니다.

SetInputValue 메쏘드로 종목을 지정하고 BlockRequest()로 요청하고 출력하는 형식인데요.증권사에서는 한 번에 받을 수 있는 데이터를 제한해 둬서 반복구문을 통해 계속 값이 나오게 하신 듯 합니다.

궁금한 점은 전 이걸 엑셀처럼 정렬해서 나오게 하고 싶은데요. 결과는 아톰에서 나오는 것처럼


20161228 개인: XXXX 외국인: XXXXX 기관:XXXXXX


이런 식으로 나옵니다. 뭔가 dataframe을 이용해야 할 것 같긴 한데 어떻게 해야 할 지 머릿속에 그려지지가 않습니다. 프로그래머 님들의 고견을 부탁드립니다. 감사합니다. (_ _)

이미지

이미지

import win32com.client
import pandas
import numpy


# 객체 생성
inCpSvr7254 = win32com.client.Dispatch("CpSysDib.CpSvr7254")

inCpSvr7254.SetInputValue(0, "A003540")
inCpSvr7254.SetInputValue(1, 6)
inCpSvr7254.SetInputValue(2, 20110101)
inCpSvr7254.SetInputValue(3, 20161227)
inCpSvr7254.SetInputValue(4, '0')
inCpSvr7254.SetInputValue(5, 0)

inCpSvr7254.BlockRequest()

count = inCpSvr7254.GetHeaderValue(1)
print(count)

for i in range(count):

    print(inCpSvr7254.GetDataValue(0, i))
    print("개인:", inCpSvr7254.GetDataValue(1, i))
    print("외국인: ", inCpSvr7254.GetDataValue(2, i))
    print("기관계: ", inCpSvr7254.GetDataValue(3, i))

while inCpSvr7254.Continue:
    inCpSvr7254.BlockRequest()
    count = inCpSvr7254.GetHeaderValue(1)
    print(count)

    for i in range(count):
        print("-----------------------------")
        print(inCpSvr7254.GetDataValue(0, i))
        print("개인:", inCpSvr7254.GetDataValue(1, i))
        print("외국인: ", inCpSvr7254.GetDataValue(2, i))
        print("기관계: ", inCpSvr7254.GetDataValue(3, i))

1 답변

  • 데이터를 다루는 작업을 모두 코드상에서 처리할 필요는 없습니다.

    저는 데이터를 다룰일이 생기면 우선은 콤마로 구분한다음 엑셀로 가져가서 가공해서 사용하는편입니다. 그럼 훨씬 쉬워질 것 같네요.

    반복되는 작업이거나, 계속 데이터를 축적할 필요가 있다면 따로 DB에 테이블을 만들어서 거기에 저장하는 방법을 사용하시는게 좋겠습니다. 지금은 데이터를 불러오는 용도로만 사용하시나요? 시스템 트레이딩을 위해서는 데이터를 잘 저장하고 있어야 할 것 같으니 개인적으로 데이터를 쌓을 수 있는 DB가 필요할겁니다.


    지금 하시려는건 출력할 때 마지막 줄에서만 줄바꿈이 되게 하면 되지 않을까요?

    print(inCpSvr7254.GetDataValue(0, i))
    print("개인:", inCpSvr7254.GetDataValue(1, i))
    print("외국인: ", inCpSvr7254.GetDataValue(2, i))
    print("기관계: ", inCpSvr7254.GetDataValue(3, i))
    

    이 부분을 아래와 같이 바꿔보세요.

    print(inCpSvr7254.GetDataValue(0, i),end="")
    print("개인:", inCpSvr7254.GetDataValue(1, i),end="")
    print("외국인: ", inCpSvr7254.GetDataValue(2, i),end="")
    print("기관계: ", inCpSvr7254.GetDataValue(3, i))
    

    end=""를 적어주면 출력할 때 줄을 바꾸지 않습니다. print문에서 개인/외국인/기관계도 안적어주시는게 좋겠네요.

    • 시간 내어 답변해주셔서 감사합니다. 나중에는 DB저장도 해보고 싶은데 아직은 언감생심인 듯 합니다. 알 수 없는 사용자 2016.12.28 20:57

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)