La fonction to_excel de pandas génère une TypeError inattendue

13

J'ai créé un dictionnaire de données pandas:

d[k] = pd.DataFrame(data=data[i])

Je suppose donc que d[k]c'est une trame de données pandas correcte.

alors

for k in d.keys():
  d[k].to_excel (file_name)

Ensuite, j'ai l'erreur:

TypeError: got invalid input value of type <class 'xml.etree.ElementTree.Element'>, expected string or Element

J'utilise Python 3.7, pandas 0.25.3.

Mise à jour : si je remplace to_excelpar to_csv, le code fonctionne parfaitement.

mommomonthewind
la source
1
c'est quoi file_name? est-ce une chaîne?
Quang Hoang
Oui, ça l'est. Juste quelque chose comme'/data/myfile.xlsx'
mommomonthewind
que se passe-t-il si vous essayez d[k].to_excel(str(filename))?
Quang Hoang
Même problème. Je ne pense pas que le problème réside dans le file_name. J'ai vérifié et je suis sûr que c'est un nom de fichier valide.
mommomonthewind
J'ai eu la même erreur en utilisant Openpyxl: 3.0.2 pandas 0.25.3 Python 3.8.1 (tags / v3.8.1: 1b293b6, 18 décembre 2019, 23:11:46) [MSC v.1916 64 bits (AMD64)] Suppression openpyxl 3.0.2 et la mise à niveau d'openpyxl vers 3.0.3 ont résolu le problème, comme d'autres l'ont signalé. Je vous remercie. Une chose que j'ajouterai: le bogue openpyxl 3.0.2 a corrompu le fichier * .xlsx auquel il était ajouté, le rendant illisible et irrécupérable par Excel.
user39678

Réponses:

37

J'ai le même problème avec openpyxl=3.0.2,

Référez-vous à cette réponse , je ramène openpyxl à 3.0.1 (conda ou pip) et cela fonctionne.

>>> conda remove openpyxl
>>> conda install openpyxl==3.0.1

ou

>>> pip uninstall openpyxl
>>> pip install openpyxl==3.0.1
Animeta
la source
Ce problème a été corrigé dans openpyxl 3.0.3.
zeeks