파이썬 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문에서 개인/외국인/기관계도 안적어주시는게 좋겠네요.
댓글 입력