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
반응형
댓글