3
votes

Lire le fichier Excel de S3 dans Pandas DataFrame

J'ai une configuration de notification SNS qui déclenche une fonction Lambda lorsqu'un fichier .xlsx est téléchargé dans le compartiment S3.

La fonction lambda lit le fichier .xlsx dans Pandas DataFrame.

Invalid file path or buffer object type: <type 'dict'>: ValueError
Traceback (most recent call last):
File "/var/task/handler.py", line 26, in main
df = pd.read_excel(obj, header=2)
File "/var/task/pandas/util/_decorators.py", line 178, in wrapper
return func(*args, **kwargs)
File "/var/task/pandas/util/_decorators.py", line 178, in wrapper
return func(*args, **kwargs)
File "/var/task/pandas/io/excel.py", line 307, in read_excel
io = ExcelFile(io, engine=engine)
File "/var/task/pandas/io/excel.py", line 376, in __init__
io, _, _, _ = get_filepath_or_buffer(self._io)
File "/var/task/pandas/io/common.py", line 218, in get_filepath_or_buffer
raise ValueError(msg.format(_type=type(filepath_or_buffer)))
ValueError: Invalid file path or buffer object type: <type 'dict'>


0 commentaires

3 Réponses :


5
votes

C'est parfaitement normal! obj est un dictionnaire, avez-vous essayé?

df = pd.read_excel(obj['body'], header=2)


2 commentaires

C'était ça. df = pd.read_excel (obj ['corps'], en-tête = 2). Il manque la fermeture de votre message] pour "corps". Merci pour l'aide.


Mon plaisir :) P.S: J'ai ajouté le]



0
votes

Si obj est un dictionnaire, vous pouvez essayer

df = pd.DataFrame.from_dict(obj)

Documentation ici si vous avez besoin de changer les paramètres.


0 commentaires

2
votes

Pandas prend désormais en charge l'URL s3 comme chemin de fichier afin de pouvoir lire le fichier Excel directement à partir de s3 sans le télécharger au préalable.

Voir ici un exemple CSV - https://stackoverflow.com/a/51777553/52954


0 commentaires