尝试读取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个文件中对应的表合并。所以,请不要处理工作建议。
5条答案
按热度按时间6uxekuva1#
很可能你正在使用Python 3。在Python 2中,这是不会发生的。
xlsx文件是二进制的(实际上它们是一个xml,但它是压缩的),所以需要以二进制模式打开它们。使用此调用打开:
没有完整的回溯,但我认为UnicodeDecodeError来自file对象,而不是read_excel()。这是因为字节流可以包含任何内容,但我们不希望解码发生得太快; read_excel()必须接收原始字节并能够处理它们。
x759pob22#
问题是原始请求者调用read_excel时使用文件句柄作为第一个参数。正如最后一个响应者所演示的,第一个参数应该是包含文件名的字符串。
我在使用时遇到了同样的错误:
df = pd.read_excel(open("file.xlsx",'r'))
但正确的是:
df = pd.read_excel("file.xlsx")
hlswsv353#
最有可能的问题是在俄罗斯符号。
Charmap是默认的解码方法,用于没有编码的情况下。
正如我看到的,如果utf-8和拉丁语-1不帮助,然后尝试读取此文件不作为
但是
甚至只是
为了检查什么是符号,提出一个例外并删除该符号/多个符号。
k3bvogb14#
Pandas支持编码功能来读取您的Excel在您的情况下,您可以用途:
或者,如果你想在更多的系统特定没有任何surpise,你可以用途:
yduiuuwa5#
有时,如果我们在Excel工作表中有空单元格,即Pandas数据框中的空值,则必然会发生此错误,为此,我们可以使用以下方法,该方法对我有效。