hyunyulhenry / quant_py

파이썬을 이용한 퀀트 투자 포트폴리오 만들기
179 stars 99 forks source link

안녕하세요 수업을 열심히 따라가고 있는 초보입니다 #35

Closed jinseungwook closed 8 months ago

jinseungwook commented 11 months ago

재무제표 크롤링에서 df['기준일'] = pd.to_datetime(df['기준일'], format='%Y-%m') 이 부분을 실행하게 되면 ValueError: time data "2020/12" doesn't match format "%Y-%m", at position 0. You might want to try:

다음과 같은 오류가 뜹니다 해결할 수 있는 방법이 있는지 궁금합니다!

ChoiInYeol commented 11 months ago

%Y-%m 부분을 %Y/%m 로 바꿔보세요

ValueError: time data "2020/12" doesn't match format "%Y-%m", at position 0. You might want to try:

보시다시피 "2020/12"의 형식은 "%Y/%m"의 형식입니다. 나중에 수정이 된 것 같아요.

jinseungwook commented 11 months ago

답변 주셔서 정말 감사합니다. 또 질문이 있는데 여쭈어봐도 괜찮을까요..? z_quality = data_bind_group[['ROE', 'GPA', 'CFO' ]].apply(lambda x: col_clean(x, 0.01, False)).sum( axis=1, skipna=False).to_frame('z_quality') data_bind = data_bind.merge(z_quality, how='left', on=['종목코드', 'SEC_NM_KOR'])

data_bind.round(4).head()

이 코드를 진행 시키면 ValueError: The name SEC_NM_KOR occurs multiple times, use a level number 이런 오류 코드가 뜹니다. 데이터 저장에 문제가 있을까요? 아니면 다른 방법이 있을까요? 감사합니다

ChoiInYeol commented 11 months ago

전후 상황이나 오류를 캡처해주실 수 있나요? 말씀해주신 내용으로는 정확한 원인이 뭔지 모르겠네요. 아마 SEC_NM_KOR 라는 컬럼명이 두 개 존재하게 되어서 발생하는 것 같은데요...

Uncommonness commented 9 months ago

문제가 해결되셨나요? 저도 어제 같은 문제가 발생했습니다.

기존 코드 z_quality = data_bind_group[['ROE', 'GPA', 'CFO' ]].apply(lambda x: col_clean(x, 0.01, False)).sum( axis=1, skipna=False).to_frame('z_quality') data_bind = data_bind.merge(z_quality, how='left', on=['종목코드', 'SEC_NM_KOR'])

data_bind.round(4).head()

변경 코드 z_quality = data_bind_group[['ROE', 'GPA', 'CFO' ]].apply(lambda x: col_clean(x, 0.01, False)).sum( axis=1, skipna=False).to_frame('z_quality') data_bind = data_bind.merge(z_quality.reset_index(level=0).reset_index(level=0).drop('SEC_NM_KOR', axis=1), how='left', on=['종목코드', 'SEC_NM_KOR'])

data_bind.round(4).head()

저는 이렇게 해결했습니다.

hyunyulhenry commented 8 months ago
data_bind_group = data_bind.set_index(['종목코드',
                                       'SEC_NM_KOR']).groupby('SEC_NM_KOR', as_index=False)

그룹을 묶을 때 as_index=False 추가해주시면 됩니다.