熊猫读取_excel:'utf-8'编解码器无法解码位置14的字节0xa8:无效的起始字节

pur*_*rue 5 python excel pandas

试图读取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)
Run Code Online (Sandbox Code Playgroud)

结果:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa8 in position 14: invalid start byte
Run Code Online (Sandbox Code Playgroud)

不带 encoding ='utf8'

'charmap' codec can't decode byte 0x9d in position 622: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

PS任务是处理52个文件,将每张纸中的数据与52个文件中的对应纸合并。因此,请不要处理任何工作建议。

Ala*_*oni 13

您很可能正在使用 Python3。在Python2 中这不会发生。

xlsx 文件是二进制的(实际上它们是一个 xml,但它被压缩了),因此您需要以二进制模式打开它们。使用此调用打开:

open('1.xlsx', 'rb')
Run Code Online (Sandbox Code Playgroud)

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


小智 9

问题是原始请求者使用文件句柄作为第一个参数调用 read_excel 。正如最后一个响应者所展示的,第一个参数应该是一个包含文件名的字符串。

我使用以下方法遇到了同样的错误:

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

但正确的是:

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


Pol*_*ova 3

问题很可能出在俄语符号上。

Charmap 是在没有注意到编码的情况下使用的默认解码方法。

据我所知,如果 utf-8 和 latin-1 没有帮助,那么尝试读取此文件而不是

pd.read_excel(f)
Run Code Online (Sandbox Code Playgroud)

pd.read_table(f)
Run Code Online (Sandbox Code Playgroud)

甚至只是

f.readline()
Run Code Online (Sandbox Code Playgroud)

为了检查什么是符号,请引发异常并删除该符号。