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