본문 바로가기
  • Hello_
Python/Error

[Python_Error] TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"

by LDwDL 2023. 2. 3.
728x90
반응형

본 포스팅은 업무 중 발생했던 오류들을 어떻게 해결했는지 작성했다.

 

TypeError: first argument must be an iterable of pandas 
objects, you passed an object of type "DataFrame"

위 에러는 pandas에서 제공하는 concat 함수를 사용할 때 발생한 오류이다. concat에 입력이 리스트 혹은 튜플이 아닌 형태로 들어갈 때 위와 같은 에러 메시지가 떴다.

 

에러 발생

에러가 발생한 코드는 다음과 같다.

 

xray_excel_path = './new_annotation.xlsx'

for i in range(10):
    ct_dict = {}

ct_dict['name'] = ['ct_{}'.format(i+1)]
    ct_dict['dcm_paths'] = ['./Abnormal/images/ct/{}'.format(i+1)]
    ct_dict['label_paths'] = ['./Abnormal/labels/ct/{}'.format(i+1)]
    ct_dict['dcm_extentions'] = ['.dcm']
    ct_dict['label_extentions'] = ['.nii.gz']

xray_df = pd.read_excel(xray_excel_path)

df = pd.concat(pd.DataFrame(ct_dict),xray_df) ##### 에러 발생!

 

해당 코드는 특정 엑셀파일을 읽어서 반환된 Dataframe에 새로운 Dataframe을 concat하기 위한 코드이다.

마지막 줄에 TypeError가 발생했다. (df = pd.concat(pd.DataFrame(ct_dict),xray_df))

 

첫번째 인자에 문제가 발생했다는 것인데 급하게 코드를 구성하다 보니 놓치는 부분이 있었다.

 

바로 pd.concat에 첫번째 인자로 중첩시키고 싶은 Dataframe들을 리스트 혹은 튜플로 구성하여 한번에 입력이 되어야 한다는 것이다.

 

해결 : pd.concat(dataframe_1, dataframe_2) -> pd.concat([dataframe_1,dataframe_2])

 

#df = pd.concat(pd.DataFrame(ct_dict),xray_df)

df = pd.concat([pd.DataFrame(ct_dict),xray_df])

 

 

위와 같이 수정시켜주면 문제없이 하나의 Dataframe으로 concat이 된다.

 

728x90
반응형

댓글