inflearn logo
강의

Course

Instructor

Finding Signals and Noise through Python Stock Data Collection and Analysis

pd.concat(result.tolist()) 오류 문의

Resolved

244

kimv1007067

2 asked

0

5.1 업종 테마주 수집.ipynb 진행 과정에서

pd.concat(result.tolist()) 에서

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

가 발생하는데, inplace=True를 추가 또는 다양한 방법으로 해결하려 해도 해결이 되지 않습니다.

이전 다른 분들도 같은 오류가 나서 문의를 하였는데 해결이 되었나요?

 

참고로, 테스트 하는 과정에서 get_item_info 함수 안의

finance_info = tables[3].iloc[:, [0, -1]]

finance_info.columns = [0, 1]

item_info.append(finance_info)

문장을 주석처리 하면 pd.concat(result.tolist()) 부분이 정상적으로 처리가 되고 있습니다.

 

원인과 해결 방법을 알려 주시면 감사하겠습니다.

python pandas numpy 웹-크롤링 seaborn plotly matplotlib 웹-스크래핑

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

pd.concat(result.tolist())에서 InvalidIndexError: Reindexing only valid with uniquely valued Index objects 오류가 발생하는 경우, 합치려는 DataFrame들 중 하나 이상이 중복된 인덱스 값을 가지고 있기 때문입니다. 이는 pd.concat 함수가 유니크한 인덱스를 기대하는데, 중복된 인덱스 값을 갖는 DataFrame이 존재할 때 발생합니다.

문제를 해결하기 위해 아래 방법을 시도해 볼 수 있습니다.

  1. 인덱스 초기화: 각 DataFrame의 인덱스를 reset_index()를 통해 초기화한 후에 pd.concat을 시도합니다. 이렇게 하면 각 DataFrame이 고유한 인덱스를 가지게 되어 오류가 해결될 수 있습니다.

    result = [df.reset_index(drop=True) for df in result]
    pd.concat(result.tolist())
    

    이 때, drop=True 옵션을 주면 기존 인덱스가 새로운 컬럼으로 추가되지 않고 삭제됩니다.

  2. 중복 인덱스 확인: pd.concat 하기 전에 각 DataFrame의 인덱스가 유니크한지 확인합니다. 만약 중복된 인덱스가 있다면, 인덱스를 변경하거나 유니크하게 만든 후 concat을 진행해야 합니다.

본문에서 언급하신 것처럼 finance_info = tables[3].iloc[:, [0, -1]]에서 생성된 finance_info DataFrame이 문제일 수 있습니다. 이 경우, finance_info의 인덱스에 중복이 없는지 확인하거나, 위 방법으로 인덱스를 초기화하고 다시 시도해 보세요.

질문에서 언급된 get_item_info 함수의 일부 코드를 주석 처리했을 때 오류가 사라진다는 점을 통해, 이 부분에서 중복 인덱스가 발생할 수 있음을 짐작할 수 있습니다. 따라서 finance_info를 생성하거나 추가할 때 중복 인덱스가 발생하지 않도록 처리하는 것이 중요합니다.

해결 방안을 시도해 보시고, 여전히 문제가 해결되지 않는다면, 추가적인 정보나 오류 메시지와 함께 다시 문의해 주세요.

1

kimv1007067

위의 방법으로도 문제가 해결되지 않아 원인을 파악해 본 결과, 다음과 같이 해결할 수 있었습니다.

네이버의 업종주 목록에는 코스피, 코스닥뿐만 아니라 코넥스도 포함되어 있습니다. 코넥스기업의 경우, 코스피/코스닥 기업과 달리 "기업실적분석" 결과가 없기 때문에 취합된 데이터 형식의 구성이 달라 오류가 발생하였습니다.

이를 해결하기 위하여 df_krx = df_krx[df_krx['Market'].isin(['KOSPI', 'KOSDAQ'])] 구문을 사용하여 코스피와 코스닥 기업만을 대상으로 데이터를 취합해 보니 다행히 정상적으로 진행되었습니다.

모든 데이터를 취합하여 검증하고 후처리하는 것이 이상적이겠지만, 일단은 위 방법으로 수업을 계속 진행할 수 있었습니다. 혹시 다른 해결 방법을 알고 계시면 공유해 주시면 감사하겠습니다.

감사합니다.

cufflinks 버전문제로 iplot() 미실행

0

43

2

[수정요청]직접 수집한 주가 데이터로 시각화해보기

0

52

2

pd.read_html(url, encoding='cp949') 에러

0

75

2

fdr.StockListing('KRX') 문제 발생

0

137

2

주식 자동매매 프로그램 제작 관련 조언 부탁드립니다

0

431

1

concat 을 통한 데이터 프레임 합치기 에러 문의

0

105

2

한글폰트 관련해서 문의드립니다.

0

230

2

데이터프레임 칼럼명 문의 드립니다.

0

239

3

금융데이터 수집의 모든것

0

145

2

녹화시점과 현재시점 컬럼명이 변경이 많이 되었을까요?

0

192

2

파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기 - 섹션1 [2/2]

0

174

1

Mac 환경에서 nbextensions 활성화 하는 방법

0

594

2

5.1 제약 데이터 수집 오류 해결

0

231

1

Table of contents 문의드립니다

0

209

2

concat을 통한 데이터프레임 합치기

0

548

2

Reindexing only valid with uniquely valued Index objects 오류 질문입니다.

0

491

1

데이터 비교시 데이터 불일치

0

410

1

dtype={"itemcode": np.object}) 을 dtype={"itemcode": object}) 으로 변경해야 하나요?

0

593

1

질문 : for문 풀어쓰기

0

488

1

파이참에서 Plotly 그래프 실행방법

0

1308

1

5.1 데이터프레임 병합(merge)

0

742

2

쥬피터노트북에서 실행파일 만들기

0

1450

1

주피터노트북 확장팩 설치가 안됩니다.

0

562

2

날짜 정보

0

387

1