2017-11-16 1 views
0
터미널

에 나는 Kaggle에서 데이터 집합을 다운로드 한 다음 코드를 실행하려고 : 나는 숭고한 텍스트 내에서 실행하기 위해 노력하고있어 때, 호기심pandas.read_csv() jupyter에서 작업하지만

import pandas as pd 
movie_data = pd.read_csv('moviemetadata.csv', encoding = 'utf-8', delimiter = ',', header=0, decimal = '.') 
print(movie_data.info) 

을 또는 터미널 (I 맥에있어)가 작동하지 않고 다음과 같은 오류가 밖으로 던져됩니다 :

Traceback (most recent call last): 
File ".../test.py", line 14, in <module> 
print(movie_data.info) #UnicodeEncodeError: 'ascii' codec can't encode character '\xe5' in position 7356: ordinal not in range(128) 
UnicodeEncodeError: 'ascii' codec can't encode character '\xf3' in position 7559: ordinal not in range(128) 

나는 포함하여, 예를 들어,이 오류 메시지가 인터넷 검색 및 수정을 찾기 위해 시도 " encoding = 'utf-8' "그러나이 문제는 해결되지 않았습니다. 그런 다음 jupyter에서 동일한 코드를 실행하려고 시도했지만 완벽하게 작동합니다. 나는 내가 원하는 결과물을 정확하게 얻는다.

누가이 문제의 원인을 알고 있으며 터미널에서 동일한 코드를 사용할 수 있습니까?

추가 정보 : 터미널 및 jupyter에서 동일한 Python 버전을 사용하고 있으며 .csv 파일을 utf-8 인코딩과 함께 저장했습니다. info() 이후

movie_data.info() 

은 방법 :

+1

당신은 Jupyter와 단말기에서 동일한 파이썬 버전을 사용하고 있습니까? – eugenhu

+0

아마 2.7 터미널에서 (MAC 함께 제공). 나는 빠른 구글을 만들었고'encoding = 'utf8'을 대시없이 발견했다. 너 그거 해봤 니? 아마도 utf-8을 사용해야 할 것입니다. –

+0

'encoding = 'latin-1' 어쩌면 .. –

답변

1

당신은해야한다.

print 전화로 info()으로 전화를 걸면 기본적으로 sys.stdout으로 출력됩니다.


print(movie_data.info)이 Jupyter에하지 터미널 인해 인코딩 문제에 가능성에 근무하는 이유. 문자열이 아닌 형식을 인쇄하려고하면 print은 기본적으로 해당 개체를 str() 또는 repr() 인 문자열로 변환하려고 시도합니다. movie_data.infoMethodType, 즉 바운드 메소드이므로 repr(movie_data.info)<bound method DataFrame.info of ...>과 비슷할 것입니다. 여기서 ...은 데이터 프레임의 문자열 표현입니다. 그리고 데이터 프레임에 유니 코드 값이 포함되어 있으므로 문자열 표현도 같습니다. stdout으로 파이핑하기 전에 제대로 인코딩되지 않으면 인코딩 오류가 발생할 수 있습니다. (see also)

일반 요약 출력 info()에는 셀 또는 색인 값이 포함되지 않고 열 이름 만 표시됩니다. movie_data.info()가, 그렇지 않으면,이 같은 것을 먼저 열을 인코딩하기 위해 dataframe 열이 또한 유니 코드 문자가있을 수 있습니다하지 않는 한, 당신이 단지 수도 작동합니다 :

movie_data.columns = map(lambda s: s.encode('utf-8', 'ignore'), movie_data.columns) 
movie_data.info() 
+1

의견에서 작성한 것처럼 'movie_data.info()'는 실제로 내가 원했던 것입니다. 이것은 귀하의 설명에서 취하는 것이 아닙니다. 이것은 매우 유익합니다. 'movie_data.info'가 jupyter에서 출력을 주었을 때부터 제 단말기에 문제가 있다고 가정했기 때문입니다. 당신의 설명이 저를 위해 모든 것을 정리했습니다. – azureai

+0

@azureai 오 그래 맞아, 내 잘못은 그걸 건너 뛰었어야 했어. 나는 어쨌든 완벽을 위해서 나의 대답을 편집했다. 그것은 조금 다르지만 기본적으로'print_'에 넣지 않고'movie_data.info()'를 가질 수 있습니다. – eugenhu

관련 문제