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合并多个EXCEL表格时,如果表格有密码,密码已知,该怎么通过pandas合并,
使用 pandas(和 glob?)合并目录中的大量(csv)数据文本文件
Pandas 和 glob:将文件夹中的所有 xlsx 文件转换为 csv – TypeError: __init__() got an unexpected keyword argument 'xf