본문 바로가기
프로젝트

데이터 프레임 병합과정의 오류 해결과정 (pd.concat으로 해결!)

by 포 키 2023. 9. 20.
728x90
반응형

회귀분석을 진행하기 위해 데이터를 수집해서 데이터프레임으로 만들었다.

기존에 전처리를 하고 리스트 형태로 만들어서 하나의 데이터 프레임으로 4년치의 데이터를 추가했었는데,

기존 데이터프레임과 회귀용 데이터프레임을 병합하는 과정에서 문제가 생겼다.

 

에러 해결과정

 

merged_df = pd.merge(total_cost_comparison, Regression_analysis, on='평균', how='inner')
TypeError: cannot concatenate object of type '<class 'list'>'; only Series and DataFrame objs are valid

 

처음에 발생한 오류는 total_cost_comparison가 이전에 내가 리스트 형태로 묶은 것을 사용해서 났다.

그래서 데이터프레임으로 변경해서 코드를 작성했다.

 

merged_df = pd.merge(merged_total, Regression_analysis, on='공통열', how='inner')
InvalidIndexError: Reindexing only valid with uniquely valued Index objects

 

그 다음 발생한 오류는 내가 4년치의 데이터를 합치면서 인덱스를 새로 지정하는 것을 하지 않았다.

그래서 중복되는 인덱스들로 인해 에러가 발생했다.

해결방법은 이전에 사용한 코드에서 인덱스를 다시 지정하라는 코드를 작성해주면 된다.

 

for df in total_cost_comparison:
    df.reset_index(drop=True, inplace=True)

merged_total = pd.concat(total_cost_comparison, axis=0, ignore_index=True)

사실 ignore_index  = True 말고 위의 for 문만 사용해도 된다.

왜냐하면 위에 for 문을 통해서 이미 인덱스를 새로 하나씩 부여받은 상태이기 때문에,

중복되는 인덱스는 무시한다는 것을 쓰지 않아도 된다.

그러나 중복되는 인덱스 부분을 굳이 쓸 필요없는 상황이면 그냥 ignore_index  = True를 사용하면 된다.

뭐.. 그런 상황이 있을까 싶긴 하지만? ㅋㅋㅋ

 

에러가 없는 상황에서 merge를 사용했지만 인덱스 수가 576개로 급증하는 이슈가 발생했다.

 

merged_regression = pd.concat([merged_total, Regression_analysis], axis=1)

merged_regression

그래서 다시 병합을 해줬는데, 코드를 다르게 활용했다.

아까는 merge를 사용해서 공통열을 기점으로 병합했다면, 행을 기준으로 병합하는 것으로 했다.

이렇게 하니까 행의 갯수가 증폭되지 않고 잘 나왔다!!

여기서 내가 중복된다거나 사용하지 않을 컬럼 값은 삭제해버리면 그만이다.

 

다시 필요한 부분 솎아내는 전처리를 해서 깔끔하게 활용하면 끝이다. ㅜㅜㅠㅠㅠ

 

728x90
반응형