Pandas read _excel:'utf-8'编解码器无法解码位置14中的字节0xa 8:无效起始字节

hi3rlvi2  于 2023-06-20  发布在  其他
关注(0)|答案(5)|浏览(195)

尝试读取MS Excel文件,版本2016。文件包含几个包含数据的列表。从数据库下载的文件,它可以在MS Office中正确打开。在下面的例子中,我改变了文件名。

**编辑:**文件包含俄语和英语单词。大多数可能使用Latin-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>

P.S.任务是处理52个文件,将每张表中的数据与52个文件中对应的表合并。所以,请不要处理工作建议。

6uxekuva

6uxekuva1#

很可能你正在使用Python 3。在Python 2中,这是不会发生的。
xlsx文件是二进制的(实际上它们是一个xml,但它是压缩的),所以需要以二进制模式打开它们。使用此调用打开:

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

没有完整的回溯,但我认为UnicodeDecodeError来自file对象,而不是read_excel()。这是因为字节流可以包含任何内容,但我们不希望解码发生得太快; read_excel()必须接收原始字节并能够处理它们。

x759pob2

x759pob22#

问题是原始请求者调用read_excel时使用文件句柄作为第一个参数。正如最后一个响应者所演示的,第一个参数应该是包含文件名的字符串。
我在使用时遇到了同样的错误:
df = pd.read_excel(open("file.xlsx",'r'))
但正确的是:
df = pd.read_excel("file.xlsx")

hlswsv35

hlswsv353#

最有可能的问题是在俄罗斯符号。
Charmap是默认的解码方法,用于没有编码的情况下。
正如我看到的,如果utf-8和拉丁语-1不帮助,然后尝试读取此文件不作为

pd.read_excel(f)

但是

pd.read_table(f)

甚至只是

f.readline()

为了检查什么是符号,提出一个例外并删除该符号/多个符号。

k3bvogb1

k3bvogb14#

Pandas支持编码功能来读取您的Excel在您的情况下,您可以用途:

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

或者,如果你想在更多的系统特定没有任何surpise,你可以用途:

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

yduiuuwa5#

有时,如果我们在Excel工作表中有空单元格,即Pandas数据框中的空值,则必然会发生此错误,为此,我们可以使用以下方法,该方法对我有效。

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)

相关问题