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

Posted

技术标签:

【中文标题】PANDAS & glob - Excel 文件格式无法确定,必须手动指定引擎【英文标题】:PANDAS & glob - Excel file format cannot be determined, you must specify an engine manually 【发布时间】:2021-09-29 08:05:03 【问题描述】:

虽然有时我的代码运行良好,但我不确定为什么会收到此错误!

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 蟒蛇版本:python3.9 操作系统:MacOS

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

【问题讨论】:

【参考方案1】:

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

~$datasheet.xlsx

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

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

当所有文件都关闭并且没有隐藏的临时文件 ~$filename.xlsx 在同一目录中时,代码可以完美运行。

【讨论】:

【参考方案2】:

还要确保您使用的是正确的pd.read_* 方法。尝试使用read_excel() 而不是read_csv() 打开.csv 文件时遇到此错误。我发现这个方便的 sn-p 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())

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

感谢您指出一个可能重复的问题。但是,您可能会考虑两件事:1)仅将其作为对问题的评论而不是答案 2)如果您提到的 SO 页面中的解决方案不完全相同,则应包括您也采取的步骤,不仅是链接 感谢您让我知道,下次我会尽量记住这一点 :) 很想将我的答案转移到 cmets,不幸的是,在我得到之前我不允许制作 cmets 50 次。【参考方案5】:

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

【讨论】:

以上是关于PANDAS & glob - Excel 文件格式无法确定,必须手动指定引擎的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas GroupBy

求助,使用Python合并多个EXCEL表格时,如果表格有密码,密码已知,该怎么通过pandas合并,

附加在 for 循环中生成的 pandas 数据帧

使用 pandas(和 glob?)合并目录中的大量(csv)数据文本文件

Pandas 和 glob:将文件夹中的所有 xlsx 文件转换为 csv – TypeError: __init__() got an unexpected keyword argument 'xf

按单元格值提取 excel 数据:python PANDAS