강의

멘토링

커뮤니티

Inflearn Community Q&A

pgbwings6163's profile image
pgbwings6163

asked

Finding Signals and Noise through Python Stock Data Collection and Analysis

[5/6] Viewing the entire data collection process with tqdm, merging data with merge, and saving data with to_csv

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

Written on

·

85

0

 

df_item_info = pd.concat(result.tolist())

df_item_info = df_item_info.reset_index()

df_item_info["종목코드"] = df["종목코드"]

7분 40초경 강의의 위 코드 실행시

 

InvalidIndexError                         Traceback (most recent call last)
Cell In[49], line 6
      1 # result를 list로 만들고 concat을 통해 DataFrame으로 만듭니다.
      2 # concat으로 데이터프레임을 합쳐줄때는 리스트 형태로 각 데이터프레임을 넣어주어야 합니다.
      3 # result_valid = result[result.notnull()]  # 또는: result.dropna()
      4 # df_item_info = pd.concat(result_valid.tolist(), ignore_index=True)
----> 6 df_item_info = pd.concat(result.tolist())
      7 df_item_info = df_item_info.reset_index()
      8 df_item_info["종목코드"] = df["종목코드"]

File ~\anaconda3\Lib\site-packages\pandas\core\reshape\concat.py:395, in concat(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy)
    380     copy = False
    382 op = _Concatenator(
    383     objs,
    384     axis=axis,
   (...)
    392     sort=sort,
    393 )
--> 395 return op.get_result()

File ~\anaconda3\Lib\site-packages\pandas\core\reshape\concat.py:680, in _Concatenator.get_result(self)
    678         obj_labels = obj.axes[1 - ax]
    679         if not new_labels.equals(obj_labels):
--> 680             indexers[ax] = obj_labels.get_indexer(new_labels)
    682     mgrs_indexers.append((obj._mgr, indexers))
    684 new_data = concatenate_managers(
    685     mgrs_indexers, self.new_axes, concat_axis=self.bm_axis, copy=self.copy
    686 )

File ~\anaconda3\Lib\site-packages\pandas\core\indexes\base.py:3885, in Index.get_indexer(self, target, method, limit, tolerance)
   3882 self._check_indexing_method(method, limit, tolerance)
   3884 if not self._index_as_unique:
-> 3885     raise InvalidIndexError(self._requires_unique_msg)
   3887 if len(target) == 0:
   3888     return np.array([], dtype=np.intp)

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

위와 같이 오류가 납니다.

OUTPUT 파일 이용해서 실행했었고 중간에 오류나는것들은 CHATGPT 통해서 해결했는데 위의 오류만큼은 CHATGPT를 통해도 해결이 안되네요.

혹시 해결 방법을 알 수 있을까요?

 

 

pythonpandasnumpy웹-크롤링seabornplotlymatplotlib웹-스크래핑

Answer 2

1

이거 저도 같은 에러가 있었는 데,
저의 경우에는 result로 가져온 데이터프레임 중에 컬럼명이 Nan(null)로 된 데이터프레임을 제거해서 작업하면 됐습니다.

단, result와 df 간 행의 수를 맞춰야 되어서, df도 같은 행을 제거해줘야 합니다.(df.shape와 df_item_info.shape로 최종적으로 행의 수가 같은지 확인해야함. 동일하지 않으면 추후에 데이터 분석이 불가능해짐)

 


0.12. concat을 통한 데이터 프레임 합치기
#여기 아래에서 시작
#result를 list로 만들고 concat을 통해 DataFrame으로 만듭니다 
## 라고 적힌 부분부터 수정해서 작성했습니다. 

li = []
detected_i = []
for i, r in enumerate(result):
    if r.columns.isnull.sum() == 0:
        li.append(r)
    else : 
        detected_i.append(i)
df = df.drop(detected_i)

df_item_info = pd.concat(li)
df_item_info = df_item_info.reset_index()
df = df.reset_index()
df_item_info["종목코드"] = df["종목코드"] 
del df_item_info["index"]

#합쳐줄 해당 종목/테마 데이터프레임을 봅니다.
## 여기에서 끝냈고, 나머지는 강의와 동일합니다. 
df_info = df.merge(df_item_info, on="종목코드")

 

todaycode님의 프로필 이미지
todaycode
Instructor

안녕하세요.

공유해 주셔서 감사합니다!

즐거운 연휴 되세요!

0

todaycode님의 프로필 이미지
todaycode
Instructor

안녕하세요. 해당 기능을 사용하는 장점이 어떤 컬럼이 올지 몰라도 컬럼 스키마를 지정하지 않고 사용할 수 있다는게 가장 큰 장점인데요. 판다스 기능이 업데이트 되면서 컬럼명 형식 등이 불일치 되는 데이터에 대해 병합 오류가 발생하고 있습니다. 그래서 전체를 병합하기 전에 병합할 일부 컬럼 정보를 지정하고 병합해 보시는 것을 추천드립니다. 조만간 해당 내용에 대해 콘텐츠를 업데이트하도록 하겠습니다. 이용에 불편을 드려 죄송합니다. 감사합니다!

pgbwings6163's profile image
pgbwings6163

asked

Ask a question