리스트로 이루어진 데이터 프레임에서 단어가 아닌 [ 가 추출되는 현상

이상해씨·2023년 6월 9일
0

문제

  • 각 row의 데이터가 list인 dataframe으로 이루어진 엑셀 데이터를 불러왔을 때, list 데이터가 str로 인식되는 문제
  • 단어가 아닌 [ 가 추출됨
  • list가 아니라 str로 인식되는 문제

문제상황 예시

  • 데이터
data = {
    'words': [
        ['한국', '미국', '일본', '중국', '베트남', '러시아'],
        ['경기도', '워싱턴', '도쿄', '베이징'],
        ['사과', '바나나', '배', '감', '딸기', '키위']
    ]
}
  • 코드
import pandas as pd


data=pd.read_excel('data.xlsx')

print(data['words'][0][0])
#예상 결과 : 한국
#실제 결과 : [

원인

텍스트로 인식되어야할 데이터가 다른 형태로 인식

시도 방법

강제로 적절한 데이터 형식을 인식하도록 지정
1. csv 보다 상대적으로 간단한 저장을 하는 excel
','기준으로 데이터를 읽어야 함으로, xlsx 파일보다 쉽표로 데이터를 구분하여 저장하는 csv 파일이 더 적합
또한, 텍스트 형태로 데이터를 다룰 때는 csv 파일이 xlsx 파일보다 간편하고 효과적

2. 단어별 인식
단어가 , 를 기준으로 인식을 할 수 있게 지정

3. 인코딩
한국어 인코딩을 위해 UTF-8 설정
인코딩 안 할 경우, 뛇뜛쑈ㅐ 와 같은 데이터로 읽힐 가능성이 있음

  • 코드
  1. csv 로 저장한다. df.to_csv(./data.csv)
  2. csv의 parameter로 sep=','를 설정
  3. csv의 parameter로 endcoding ='UTF-8'를 설정

  • 예시
import pandas as pd

data = {
    'words': [
        ['한국', '미국', '일본', '중국', '베트남', '러시아'],
        ['경기도', '워싱턴', '도쿄', '베이징'],
        ['사과', '바나나', '배', '감', '딸기', '키위']
    ]
}

df.to_csv('data.csv', index=False, sep=',',encoding='UTF-8') 

  1. xlsx파일을 읽을 때 , dtype=str로 지정

해결방법

import ast
data['words'] = data['words'].apply(lambda x: ast.literal_eval(x))
  • ast : Abstract Syntax Trees module, 문법을 구조화 해주는 모듈
  • literal_eval() : 문자열을 파이썬 리터럴로 바꿔주는 역할. 문자열을 파싱하여 해당하는 파이썬 객체로 변환해줌. 파싱에 사용됨

참고

  • ChatGPT
profile
공부에는 끝이 없다

0개의 댓글