본문 바로가기
프로그래밍/Python

[오류 해결] error tokenizing data. c error : expected

by 부자 꽁냥이 2021. 6. 25.

안녕하세요~ 꽁냥이에요. Pandas의 read_csv를 이용하여 텍스트 파일을 읽을 때가 있지요. 이때 분명 텍스트 파일을 열어보면 별문제 없어 보이는데 Pandas의 read_csv를 읽으면 아래와 같은 오류가 나타날 때가 있습니다.

 

error tokenizing data. c error : expected ~~

 

1. 오류원인

-라인별 구분자로 분리된 단어의 개수가 다르다-

이런 오류는 텍스트의 각 라인마다 구분자로 구분해놓았을 때 길이가 다르기 때문에 발생합니다. 예를 들어볼까요? 먼저 아래의 데이터를 다운받아주세요. 

 

GOOG Key Ratios.txt
0.00MB

 

pandas를 임포트하고 위 데이터에서 기본 구분자는 쉼표(,)이므로 따로 구분자를 지정하지 않고 read_csv를 통해 데이터를 읽어줍니다. 이때 아래와 같은 오류가 발생합니다.

 

import pandas as pd

df = pd.read_csv('./GOOG Key Ratios.txt')

 

 

오류의 내용을 읽어보니 3번째 라인에서 쉼표 구분자를 이용하여 구분할 경우 단어 1개가 되어야 하는데 12개가 되어 문제가 생겼다고 하네요. 이는 Pandas가 텍스트 파일을 읽어서 데이터프레임을 만들어줄 때 각 라인을 구분자로 분리했을 때 단어(빈 문자열 포함)의 개수가 같아야 되는 것 같습니다.

 

실제로 그런지 살펴보기 위해 해당 텍스트 파일 3번째 줄까지만 읽고 각 라인을 구분자로 분리했을 때 단어의 개수가 몇 개인지 살펴보았습니다.

 

with open('./GOOG Key Ratios_Modified.txt') as f:
    lines = f.readlines()
    
for line in lines[:3]:
    print(len(line.split(',')))

 

 

오류의 내용이 알려주듯이 3번째 라인에서 단어의 개수가 12개가 나왔습니다.

 

-해결방법-

구분자를 추가하여 각 라인별 구분자로 분리된 단어 수를 맞춰주거나 단어 수가 맞지 않는 행을 지워버리는 방법이 있습니다. 위 텍스트 파일에서 1~2라인은 사실 필요가 없는 라인이라 이를 삭제하고 다시 저장하면 잘 읽어오는 것을 알 수 있습니다.

 

 

이번 포스팅에서 살펴본 오류는 잘 나오지는 않지만 종종 발생하여 사람을 당황시킬 때가 있는데요. 부디 이번 포스팅이 도움이 되셨으면 합니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다.

 

참고자료

Morning Start - http://financials.morningstar.com/ratios/r.html?t=GOOG&region=usa&culture=en-US


댓글


맨 위로