Pandas 无法读取 S3 excel 文件。错误:无法确定 Excel 文件格式

Posted

技术标签:

【中文标题】Pandas 无法读取 S3 excel 文件。错误:无法确定 Excel 文件格式【英文标题】:Pandas can not read S3 excel file. Error: Excel file format cannot be determined 【发布时间】: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 非常相似,但还没有正确的答复。

【问题讨论】:

【参考方案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 文件出现什么问题以及何时出现问题。很可能这将是一个非常“模糊”的过程:(再次感谢您的帮助,乔纳森!

以上是关于Pandas 无法读取 S3 excel 文件。错误:无法确定 Excel 文件格式的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 read_excel 从 pandas 中的 xlsx 文件中读取日期列?

将 S3 中的 excel 文件读入 Pandas DataFrame

将文件从私有 S3 存储桶读取到 pandas 数据帧

Python:当文件在列标题中有特殊字符时,使用 Pandas 读取 Excel 文件

无法用熊猫读取 excel 文件

Pandas读写文件操作