Pandas读取excel时报错,excel表格不能被指定,是什么原因?

有没有大佬碰到过这个坑,求解,谢谢! Excel file format cannot be determined, you must specify…
关注者
21
被浏览
493,302

13 个回答

pandas 识别不了你的文件类型。

pandas 支持的文件头就这几种

    b"\x09\x00\x04\x00\x07\x00\x10\x00",  # BIFF2
    b"\x09\x02\x06\x00\x00\x00\x10\x00",  # BIFF3
    b"\x09\x04\x06\x00\x00\x00\x10\x00",  # BIFF4
    b"\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1",  # Compound File Binary
    b"PK\x03\x04" # xlsx

你的文件应该不属于上面任何一种。

我是怎么知道的?接着往下看。


报错的地方,跟进去看代码。

报错的代码在这个文件里 .../pandas/io/excel/_base.py,具体在这个位置

我们看到,这里之所以报错,是因为 ext is None。那 ext 为什么是 None 呢?得看 ext 是怎么得到的。1376行 ext = inspect_excel_format(...),来看一下 inspect_excel_format 这个函数。

inspect_excel_format 这个函数里唯一可能返回的 None 的代码在这里

peak 是文件头,这里的意思是说如果 peak 不匹配 XLS_SIGNATURES 中的任何一个 pattern,也不匹配 ZIP_SIGNATURE,那就返回 None。

那再来看 XLS_SIGNATURES 和 ZIP_SIGNATURE 是什么

现在就很清楚了。


这个报错的问题怎么解决呢?

excel 有很多种格式,同样是 xls 的后缀名,但文件可能是不同的格式,可以试试将 excel 保存其它 xls 格式,『另存为』里面有很多可选的格式。

本回答已同步个人博客:

from flask import Flask
import pandas as pd
app = Flask(__name__)
@app.route('/')
def show_excel():
    df = pd.read_excel("./学生信息表.xlsx")
    table_html = df.to_html()
    return f"""
                <h1>学生信息表</h1>
                <div>{table_html}</div>
            </body>
        </html>