我不确定为什么会收到此错误,尽管有时我的代码工作正常!
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 文件?
找到了。当 Excel 文件打开时(例如通过 MS Excel 打开),会在同一目录中创建隐藏的临时文件:
~$datasheet.xlsx
因此,当我运行代码从文件夹中读取所有文件时,它给出了错误:
Excel file format cannot be determined, you must specify an engine manually.
当所有文件都关闭并且同一目录中没有隐藏的临时文件
~$filename.xlsx
时,代码可以完美运行。
还要确保您使用正确的
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())
就我而言,我使用了
xlrd
。所以在终端:
pip install xlrd
如果没有安装pandas,请安装它:
pip install pandas
现在这样读取Excel文件:
import pandas as pd
df = pd.read_excel("filesFolder/excelFile.xls", engine='xlrd')
您可以通过检查文件是否以“~”开头来过滤掉不需要的临时文件。
import os
for file in os.listdir(folder path):
if not file.startswith("~") and file.endswith(".xlsx"):
print(file)
https://stackoverflow.com/a/32241271/17411729
链接到有关如何删除隐藏文件的答案
Mac = 转到文件夹,按 cmd + shift + 。 将显示隐藏文件,删除它,再运行它。
在 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)
当我手动将“CSV”后缀更改为“XLS”时,我还收到“Excel 文件格式...”错误。 我所要做的就是打开 Excel 并将其保存为我想要的格式。
看起来这个问题很容易解决。转到您的 Excel 文件,无论是 xls、xlsx 还是任何其他扩展名,然后从文件图标“另存为”。当提示选项时。另存为 CSV UTF-8(逗号分隔)(*.csv)
对我来说,没有像 ~$datasheet.xlsx 这样的临时 Excel 文件。 但是...当我不小心在 Excel 中打开其中一个文件时,不知何故,Excel 使该文件无法使用。 当我再次尝试用Excel打开它时,我意识到了这一点,Excel也无法打开它。 所以我不得不再次获取文件,这解决了问题。
如果您在尝试使用其 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)