programing

팬더 읽기 _excel: 'utf-8' 코덱이 위치 14에서 바이트 0xa8을 디코딩할 수 없음: 잘못된 시작 바이트

telecom 2023. 11. 1. 22:07
반응형

팬더 읽기 _excel: 'utf-8' 코덱이 위치 14에서 바이트 0xa8을 디코딩할 수 없음: 잘못된 시작 바이트

MS Excel 파일, 버전 2016을 읽으려고 합니다.파일에는 데이터가 있는 여러 목록이 들어 있습니다.DataBase에서 다운로드 받은 파일로 MS Office에서 올바르게 열 수 있습니다.아래 예제에서 파일 이름을 변경했습니다.

EDIT: 파일에 러시아어와 영어 단어가 포함되어 있습니다.대부분 라틴어-1 인코딩을 사용했을 것입니다.encoding='latin-1'도움이 되지 않는

import pandas as pd
with open('1.xlsx', 'r', encoding='utf8') as f:
        data = pd.read_excel(f)

결과:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa8 in position 14: invalid start byte

없이.encoding ='utf8'

'charmap' codec can't decode byte 0x9d in position 622: character maps to <undefined>

추신: 52개의 파일을 처리하고, 모든 시트의 데이터와 52개의 파일의 대응되는 시트를 병합하는 것이 과제입니다.그러니 업무상의 조언은 취급하지 말아주세요.

Python3를 사용하고 있을 것입니다.Python2에서는 이런 일이 일어나지 않습니다.

xlsx 파일은 바이너리(xml이지만 압축되어 있음)이므로 바이너리 모드에서 열어야 합니다.다음 통화를 사용하여 엽니다.

open('1.xlsx', 'rb')

전체 추적은 없지만 유니코드 디코딩 오류는 read_excel()이 아닌 파일 개체에서 발생한 것으로 생각됩니다.이러한 현상은 바이트 스트림에 무엇이든 포함될 수 있지만 디코딩이 너무 빨리 발생하는 것을 원하지 않기 때문에 발생합니다. read_excel()은 원시 바이트를 수신하고 해당 바이트를 처리할 수 있어야 합니다.

문제는 원래 요청자가 첫 번째 인수로 파일 핸들을 사용하여 read_excel을 호출한다는 것입니다.마지막 응답자가 보여준 것처럼 첫 번째 인수는 파일 이름을 포함하는 문자열이어야 합니다.

다음을 사용하여 동일한 오류가 발생했습니다.

df = pd.read_excel(open("file.xlsx",'r'))

그러나 정확한 것은 다음과 같습니다.

df = pd.read_excel("file.xlsx")

아마도 문제는 러시아 상징에 있을 것입니다.

Charmap은 인코딩이 감지되지 않을 경우 사용되는 기본 디코딩 방법입니다.

utf-8과 latin-1이 도움이 되지 않는 것을 알기에 이 파일을 다음과 같이 읽지 않도록 시도해 봅니다.

pd.read_excel(f)

그렇지만

pd.read_table(f)

아니면 심지어는

f.readline()

기호가 무엇인지 확인하려면 예외를 제기하고 이 기호/symbols를 삭제합니다.

여러분의 엑셀을 읽어내기 위한 팬더 지원 인코딩 기능 사용자의 경우 다음을 사용할 수 있습니다.

df=pd.read_excel('your_file.xlsx',encoding='utf-8')

또는 시스템에 좀 더 구체적으로 적용하고 싶다면 다음을 사용할 수 있습니다.

df=pd.read_excel('your_file.xlsx',encoding='sys.getfilesystemencoding()')

음, 때때로, 만약 우리가 Excel 시트에 빈 셀이 있다면, 이 오류는 발생할 수 밖에 없는데, 그것은 Pandas 데이터 프레임의 관점에서 null 값이고, 우리는 그 목적을 위해, 나에게 효과가 있었던 다음과 같은 접근법을 가질 수 있습니다.

import pandas as pd
import openpyxl

# Load Excel file using openpyxl
wb = openpyxl.load_workbook('excel_sheet_name.xlsx')
sheet = wb.active

# Create an empty DataFrame
data = []

# Iterate over the rows in the sheet
for row in sheet.iter_rows(values_only=True):
    data.append(row)

# Convert to DataFrame
excel_file = pd.DataFrame(data)

언급URL : https://stackoverflow.com/questions/48647122/pandas-read-excel-utf-8-codec-cant-decode-byte-0xa8-in-position-14-invalid

반응형