2013-03-25 4 views
5

HTML 웹 사이트를 읽고 'Amiel, Henri-Frédéric'과 같은 이름 목록이 있다고 가정합니다. 나는 다음과 같은 코드를 사용하여 HTML을 디코딩 이름 목록을 얻기 위하여파이썬에서 csv에서 인코딩 된 문자열의 데이터 프레임을 읽는 방법

:

[u'Abatantuono :이 시점에서

f = urllib.urlopen("http://xxx.htm") 
html = f.read() 
html=html.decode('utf8') 
t.feed(html) 
t.close() 
lista=t.data 

는 변수 중고 장비 구매는 같은 이름의 목록이 포함되어 있습니다 디에고 ', ..., u'Amiel, 앙리 프레데릭은']

이제 싶습니다 :

  1. 이러한 이름을 DataFrame에 넣습니다.
  2. DataFrame을 CSV 파일에 저장하십시오. 에서

    name=u'Amiel, Henri-Fr\xe9d\xe9ric' 
    name=name.encode('utf8') 
    array=[name] 
    df=pd.DataFrame({'Names':array}) 
    df.to_csv('names') 
    uni=pd.read_csv('names') 
    uni #trying to read the csv file in a DataFrame 
    

    :

  3. 가 DataFrame을 통해 파이썬에서 CSV를 읽을
  4. 편의상

,의 내가 다음 코드를 사용합니다 1 ~ 3 단계를 완료 고려 바로 위의 이름을 보자 이 때 나는 다음과 같은 오류 얻을 :

:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 67: invalid continuation byte  

을 내가 함께 위의 코드의 마지막 행을 대체하는 경우

print uni 

DataFrame을 읽을 수 있지만이 문제를 해결하는 올바른 방법이라고 생각하지 않습니다.

나는이 논쟁에 대해 다른 사용자가 게시 한 많은 질문을 적색으로했지만이 문제를 해결하지 못했습니다.

답변

9

to_csv 방법과 read_csv 함수는 모두 encoding 인수를 취합니다. 그걸 써. 그리고 내부적으로 유니 코드로 작업하십시오. 그렇지 않다면 프로그램 내에서 인코딩/디코딩을 시도하면 이됩니다.

import pandas as pd 

name = u'Amiel, Henri-Fr\xe9d\xe9ric' 
array = [name] 
df = pd.DataFrame({'Names':array}) 
df.to_csv('names', encoding='utf-8') 
uni = pd.read_csv('names', index_col = [0], encoding='utf-8') 
print uni # for me it works with or without print 

아웃 :

    Names 
0 Amiel, Henri-Frédéric 
+0

죄송합니다, 코드가 작동하지만 코드의 마지막 행으로 '인쇄 유니'를 사용하는 경우에만. "uni"를 사용하려고하면 "UnicodeDecodeError : 'utf8'코덱이 67 위치의 바이트 0xe9를 디코딩 할 수 없습니다. 유효하지 않은 연속 바이트" –

+0

@ fabrizio_ff - 'pandas' /'numpy' 버전은 무엇입니까? 너 사용하고있어? – root

+0

@ root-- numpy : 1.6.2 // pandas : 0.9.1. 마지막 코드를 사용하려고했지만 'uni'라고 쓰면 동일한 오류가 발생합니다 (대신 'print uni'와 함께 작동합니다). –

관련 문제