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")
问题很可能出在俄语符号上。
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)
为了检查什么是符号,请引发异常并删除该符号。
| 归档时间: |
|
| 查看次数: |
3106 次 |
| 最近记录: |