데이터 프레임을 다룰 때, 특정 컬럼의 형태가 아래 그림과 같이 형성된 경우가 있다.
하나의 셀에 리스트 형태로 들어있는 문자열이 있으면, 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)&판다스(Pandas)&Polars' 카테고리의 다른 글
[Pandas] 여러 파일의 행 수, 열 수를 하나의 데이터 프레임으로 만들기(listdir(), shape()) (0) | 2023.02.02 |
---|---|
[Pandas] 서로 다른 데이터프레임에서 특정 값을 매핑해 새로운 컬럼 만들기 (0) | 2023.01.10 |
[Pandas] combine_first - 두 컬럼 중 먼저 나온 값을 기준으로 새로운 컬럼 생성하기 (2) | 2022.10.24 |
[Pandas] 한글 깨짐 방지를 위해 인코딩은 'UTF-8-SIG'로 저장하기 (1) | 2022.10.24 |
[Pandas] '', NaN 값을 None으로 변환하기 (0) | 2022.10.24 |