파이썬(Python)&판다스(Pandas)&Polars

[Pandas] literal_eval - 문자열 리스트를 list type으로 변환하기

송채채 2022. 10. 24. 17:25

데이터 프레임을 다룰 때, 특정 컬럼의 형태가 아래 그림과 같이 형성된 경우가 있다.

하나의 셀에 리스트 형태로 들어있는 문자열이 있으면, type이 str로 인식하기 때문에 이 컬럼을 for문 등의 조건문을 사용할 수 없다.

이를 해결하기 위한 방법으로 ast.literal_eval 함수를 사용할 수 있다.

 

하나의 문자열만 해결하는 것 보단, 데이터프레임 수준에서 적용할 수 있는 코드를 공유하고자 한다.

데이터프레임의 특정 컬럼의 모든 셀을 한번에 변환하기 위해선, 예외 처리를 포함한 함수를 만들어 lambda를 적용하는 것이 좋다.

 

아래 코드는, str_to_list(x) 함수를 만들었고, 특정 컬럼에 apply와 lambda를 사용했다.

 

import pandas as pd 
from ast import literal_eval

# 문자열을 리스트로 변환
def str_to_list(x):
    try:
        if type(x) == str:
        	return literal_eval(x)
        elif type(x) == list:
        	return x
    except: #해당 값이 null값이거나 오류가 있을 때, None을 return 하기
        return None

df['컬럼명'] = df['컬럼명'].apply(lambda x: str_to_list(x))   
df['결측값수'] = df['결측값수'].apply(lambda x: str_to_list(x))

 

참고블로그

 

- [python] CSV파일 리스트/딕셔너리가 문자열로 되어있어요 해결방법!

 

[python] CSV파일 리스트/딕셔너리가 문자열로 되어있어요 해결방법!

CSV파일을 판다스로 읽어왔는데 리스트 또는 딕셔너리가 문자열로 읽힐 때 아주 쉬운 해결방법! (판다스 뿐만 아니라 DB에 저장되어있는 등 ... 모든 문자열에 해당) 제가 읽어온 데이터에는 geojson

domdom.tistory.com

반응형