【问题标题】:Pandas can not read S3 excel file. Error: Excel file format cannot be determinedPandas 无法读取 S3 excel 文件。错误:无法确定 Excel 文件格式
【发布时间】:2022-01-19 17:14:35
【问题描述】:

我正在使用 Pandas 从 S3 读取 excel 文件 (.xls)。该代码适用于一些文件,但对于其余文件则不能。每天收到的文件每天都有不同的值(excel文件结构相同,所以我们可以认为文件相同)。

错误是:

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

在这一行:

pd.read_excel(io.BytesIO(excel), sheet_name=sheet, index_col=None, header=[0])

我已经尝试了互联网上提到的所有解决方案:指定 engine='openpyxl' 会出现错误:

zipfile.BadZipFile:文件不是 zip 文件

并指定engine='xlrd' 会出现错误:

预期的 str、字节或 os.PathLike 对象,而不是 NoneType

我正在使用 boto3 连接到 S3 资源。 再一次,对于一些文件,我的代码工作正常。 看起来相同的 excel 文件出现这种不同行为的原因可能是什么?

我的问题与Excel file format cannot be determined with Pandas, randomly happening 非常相似,但还没有正确的答复。

【问题讨论】:

    标签: python pandas amazon-s3 boto3


    【解决方案1】:

    您正在阅读的文件总是有可能带有错误标记的扩展名、错误数据等。

    也不清楚您是如何在io.BytesIO(excel) 中获得'excel'

    看看这样的事情是否可行。这是读取 .xls 文件。我能够将 Sheet1 的内容返回到数据框。

    bucket = 'your bucket'
    key = 'test.xls'
    s3_client = boto3.client('s3')
    obj = s3_client.get_object(Bucket=bucket, Key=key)
    pd.read_excel(obj['Body'].read(), sheet_name='Sheet1', index_col=None, header=0)
    

    【讨论】:

    • 感谢您的回答,乔纳森!我正在使用与您相同的代码来读取 excel。它也适用于我的一些文件,但不适用于所有文件。但是,是的,您对 .xls 文件有问题的假设是最有可能的。可能是错误的内容或错误的文件元数据。但我不知道如何确定这些 .xls 文件到底出了什么问题。
    • 因为我没有使用 io.Bytes(IO),好奇我的代码是否给出了相同的错误。不清楚你是否在所有文件上都尝试过我的。
    • 是的,我已经在所有文件上尝试了你的代码,结果是一样的。对于某些文件,它可以正常工作,但对于其他文件则不行。所以我必须找到一种方法来确定这些 .xls 文件出现什么问题以及何时出现问题。很可能这将是一个非常“模糊”的过程:(再次感谢您的帮助,乔纳森!
    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多