【问题标题】:PANDAS & glob - Excel file format cannot be determined, you must specify an engine manuallyPANDAS & glob - Excel 文件格式无法确定,必须手动指定引擎
【发布时间】: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 文件?

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案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://stackoverflow.com/a/32241271/17411729

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

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

          【讨论】:

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

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

          【讨论】:

            猜你喜欢
            • 2022-01-19
            • 2023-04-02
            • 2019-04-06
            • 1970-01-01
            • 1970-01-01
            • 2018-11-19
            • 2015-09-13
            • 2021-12-29
            相关资源
            最近更新 更多