programing

Python panders to_excel 'utf8' 코덱이 바이트를 디코딩할 수 없음

powerit 2023. 6. 27. 22:36
반응형

Python panders to_excel 'utf8' 코덱이 바이트를 디코딩할 수 없음

Python panda에서 데이터 작업을 하려고 하는데 결과를 작성하는 데 어려움을 겪고 있습니다.데이터를 CSV 파일로 읽고 각 스크립트를 정상적으로 작동하는 고유한 CSV 파일로 내보냈습니다.최근에 워크시트와 함께 엑셀 파일 1개에 있는 모든 것을 내보내려고 했지만 몇 개의 시트에서 오류가 발생했습니다.

"utf8" 코덱이 위치 1에서 0xe9 바이트를 디코딩할 수 없음: 잘못된 연속 바이트"

엑셀로 내보내는 데 문제가 될 만한 캐릭터를 어떻게 찾아야 할지 모르겠습니다.그런데 왜 CSV로 내보내기가 잘 되는지 모르겠어요 :(

관련된 노선

from pandas import ExcelWriter
data = pd.read_csv(input)
writer = ExcelWriter(output) #output is just the filename
fundraisers.to_excel(writer, "fundraisers")
locations.to_excel(writer, "locations") #error
locations.to_csv(outputcsv) #works
writer.save()

문제가 있는 데이터 프레임의 인쇄 헤드

Event ID    Constituent ID  Email Address   First Name  \   Last Name
f       1       A       A       1
F       4       L       R       C
M       1       1       A       D
F       4       A       A       G
M       2       0       R       G
M       3       O       O       H
M       2       T       E       H
M       2       A       A       H
M       2       M       M       K
F       3       J       E       K
Location ID raised  raised con  raised email
a   0   0   0
a   8   0   0
o   0   0   0
o   0   0   0
o   0   0   0
t   5   0   0
o   1   0   0
o   6   a   0
o   6   0   0
d   0   0   0

엑셀 시트를 보면 실제로 부분적으로 인쇄가 됩니다.이름 열과 그 이상의 항목은 비어 있지만 이벤트, 구성 요소 및 전자 메일은 모두 인쇄됩니다.

edit: utf8에서 csv를 읽으려고 하면 실패하지만 latin1처럼 읽습니다.to_excel 인코딩을 지정하는 방법이 있습니까?아니면 내 데이터 프레임을 utf8로 디코딩하고 인코딩합니까?

이 문제를 해결했습니다.

문자열이 있는 열을 통과하는 함수를 만들어 utf8로 디코딩/인코딩을 수행했고 이제 작동합니다.

def changeencode(data, cols):
    for col in cols:
        data[col] = data[col].str.decode('iso-8859-1').str.encode('utf-8')
    return data   

저의 경우, 처음에 잘못된 인코딩으로 CSV 파일을 읽고 있었던 것이 문제였습니다.ASCII대신에cp1252그래서 판다들이 엑셀 파일로 쓰려고 했을 때, 그것은 해독할 수 없는 문자들을 발견했습니다.

CSV 파일을 읽을 때 올바른 인코딩을 지정하여 해결했습니다.

data = pd.read_csv(fname, encoding='cp1252')

실제로 ExcelWriter에 매개 변수를 전달하여 utf8 인코딩을 강제하는 방법이 있습니다.

 ew = pandas.ExcelWriter('test.xlsx',options={'encoding':'utf-8'})
 sampleList = ['Miño', '1', '2', 'señora']
 dataframe = pandas.DataFrame(sampleList)
 dataframe.to_excel(ew)
 ew.save()

가장 간단한 것은 데이터 프레임을 utf-8에 로드하는 것입니다.그러면 ExcelWriter로 문제를 해결할 수 있습니다.

data = pd.read_csv(path,encoding='utf-8')

언제 출시될지는 모르지만 내 github 저장소로 시도해 볼 수 있습니다.

https://github.com/jtornero/pandas

당신은 그것을 복제하고 원천으로부터 판다를 만들 수 있습니다; 그 문제는 거의 해결되었고 그것은 다음과 같이 작동합니다.

sampleList = ['Miño', '1', '2', 'señora']
dataframe = pandas.DataFrame(sampleList)
ew = pandas.ExcelWriter('./test.xls', encoding='utf-8')
dataframe.to_excel(ew)
ew.save()

건배.

호르헤 토르네로

@Zenadix가 말한 것과 유사하게, 의 csvs를 UTF-8로 읽는 것은 ExcelWriter가 오류 없이 쓸 수 있도록 했습니다.

df = pd.read_csv('path', encoding='utf-8')

...

with pd.ExcelWriter('new_path') as writer:
    df.to_excel(writer, sheet_name='Foo')


언급URL : https://stackoverflow.com/questions/18645401/python-pandas-to-excel-utf8-codec-cant-decode-byte

반응형