无法确定Excel文件格式,必须手动指定引擎

问题描述 投票:0回答:10

我不确定为什么会收到此错误,尽管有时我的代码工作正常!

Excel file format cannot be determined, you must specify an engine manually.

下面是我的代码和步骤:

1- 客户 ID 列列表:

customer_id = ["ID","customer_id","consumer_number","cus_id","client_ID"]

2-查找文件夹中所有 xlsx 文件并读取它们的代码:

l = [] #use a list and concat later, faster than append in the loop
for f in glob.glob("./*.xlsx"):
    df = pd.read_excel(f).reindex(columns=customer_id).dropna(how='all', axis=1)
    df.columns = ["ID"] # to have only one column once concat
    l.append(df)
all_data  = pd.concat(l, ignore_index=True) # concat all data

我添加了引擎

openpyxl

df = pd.read_excel(f, engine="openpyxl").reindex(columns = customer_id).dropna(how='all', axis=1)

现在我得到了一个不同的错误:

BadZipFile: File is not a zip file

熊猫版本:1.3.0 python版本:python3.9 操作系统:MacOS

有没有更好的方法从文件夹中读取所有 xlsx 文件?

python python-3.x pandas dataframe valueerror
10个回答
45
投票

找到了。当 Excel 文件打开时(例如通过 MS Excel 打开),会在同一目录中创建隐藏的临时文件:

~$datasheet.xlsx

因此,当我运行代码从文件夹中读取所有文件时,它给出了错误:

Excel file format cannot be determined, you must specify an engine manually.

当所有文件都关闭并且同一目录中没有隐藏的临时文件

~$filename.xlsx
时,代码可以完美运行。


38
投票

还要确保您使用正确的

pd.read_*
方法。当我尝试使用
.csv
而不是
read_excel()
打开
read_csv()
文件时,我遇到了此错误。我在here找到了这个方便的代码片段,可以根据 Excel 文件类型自动选择正确的方法。

if file_extension == 'xlsx':
    df = pd.read_excel(file.read(), engine='openpyxl')
elif file_extension == 'xls':
    df = pd.read_excel(file.read())
elif file_extension == 'csv':
    df = pd.read_csv(file.read())

4
投票

就我而言,我使用了

xlrd
。所以在终端:

pip install xlrd

如果没有安装pandas,请安装它:

pip install pandas

现在这样读取Excel文件:

import pandas as pd

df = pd.read_excel("filesFolder/excelFile.xls", engine='xlrd')

4
投票

您可以通过检查文件是否以“~”开头来过滤掉不需要的临时文件。

import os

for file in os.listdir(folder path):
    if not file.startswith("~") and file.endswith(".xlsx"):
        print(file)

2
投票

https://stackoverflow.com/a/32241271/17411729

链接到有关如何删除隐藏文件的答案

Mac = 转到文件夹,按 cmd + shift + 。 将显示隐藏文件,删除它,再运行它。


2
投票

在 macOS 中,每个文件夹中都会自动生成一个名为“.DS_Store”的“不可见文件”。对我来说,这就是问题的根源。我用 if 语句解决了这个问题,以绕过“不可见文件”(这不是 xlsx,因此会触发错误)

for file in os.scandir(test_folder):
    filename = os.fsdecode(file)
    if '.DS_Store' not in filename:
        execute_function(file)

1
投票

当我手动将“CSV”后缀更改为“XLS”时,我还收到“Excel 文件格式...”错误。 我所要做的就是打开 Excel 并将其保存为我想要的格式。


1
投票

看起来这个问题很容易解决。转到您的 Excel 文件,无论是 xls、xlsx 还是任何其他扩展名,然后从文件图标“另存为”。当提示选项时。另存为 CSV UTF-8(逗号分隔)(*.csv)


1
投票

对我来说,没有像 ~$datasheet.xlsx 这样的临时 Excel 文件。 但是...当我不小心在 Excel 中打开其中一个文件时,不知何故,Excel 使该文件无法使用。 当我再次尝试用Excel打开它时,我意识到了这一点,Excel也无法打开它。 所以我不得不再次获取文件,这解决了问题。


0
投票

如果您在尝试使用其 URL 从 Google Sheets 读取表格时遇到上述错误,请尝试

read_html
(请注意,
read_html
返回一个列表,因此我们需要对其建立索引以获取数据帧):

url = "https://docs.google.com/spreadsheets/d/{long-spreadsheet-key}/edit"

df = pd.read_excel(url)           # <--- ValueError: Excel file format...
df = pd.read_html(url)[0]         # <--- OK

另一种可行的方法是导出到 csv(将 URL 修改为 /export 而不是 /edit 并使用

read_csv
):

url = "https://docs.google.com/spreadsheets/d/{long-spreadsheet-key}/edit"
export_url = url.split("/edit", 1)[0] + "/export?format=csv"
df = pd.read_csv(export_url)
© www.soinside.com 2019 - 2024. All rights reserved.