본문 바로가기

Programming/Python

[Python] TypeError: cannot perform reduce with flexible type (에러 해결 - list_eval, dtype)

728x90
반응형

데이터프레임을 csv 파일로부터 읽어와 np.mean을 하는데 만난 에러!

 

TypeError: cannot perform reduce with flexible type

 

테스트 후 저장 할 때까지는 잘 작동했는데 다시 load하니 이런 에러를 만났다.

 

찾아보니 주로 이 에러는 수치형 데이터가 아닌 데이터로 수치형 연산을 하려할 때 발생한다고 한다.

그래서 확인해보니 나는 분명 수치형 데이터를 저장해주었는데 다시 load하는 과정에서 살펴보니 str 객체로 바뀌어있었다.

왜그럴까?!

 

찾아보니 pandas의 read_csv 함수 같은 경우 첫 번째 행의 데이터를 기준으로 각 column 별 데이터형 타입을 자동으로 맞추어주는데 종종 잘못 매칭을 해주는 경우가 있다고 한다.

그래서 굳이 데이터타입이 잘못 매칭되는 경우가 아니면 신경 쓸 필요가 없지만 그런 경우에는 read_csv 시 dtype 속성으로 데이터 타입을 직접 명시해주어야 한다.

 

 

이런 식으로!

 

df = pd.read_csv('csv파일.csv', dtype = {"id" : int, "A" : float}

 

 

만약 csv 파일 내에 list로 객체를 저장해두는 경우

[1, 2, 3, 4, 5] -> '['를 보고 str 객체로 read를 하게 된다.

이럴 경우에는 literal_eval 라이브러리를 통해서 리스트 객체는 리스트 그 자체로 불러올 수 있게 해주어야 한다.

 

from ast import literal_eval

df = pd.read_csv('csv파일.csv', converters = {"A" : literal_eval})

 

그동안 dtype의 필요성을 못 느껴서 굳이 사용하지 않았는데 이제부터 항상 주의해주어야겠다!

728x90
반응형