inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Tìm kiếm tín hiệu và nhiễu bằng cách thu thập và phân tích dữ liệu chứng khoán bằng Python

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

Đã giải quyết

244

kimv1007067

2 câu hỏi đã được viết

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 웹-스크래핑

Câu trả lời 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

44

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

175

1

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

0

594

2

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

0

231

1

Table of contents 문의드립니다

0

210

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