A função to_excel dos pandas gera um TypeError inesperado

13

Eu criei um dicionário de dataframe de pandas:

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

Então, eu suponho que esse d[k]é um dataframe de pandas correto.

Então

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

Então eu tenho o erro:

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

Estou usando Python 3.7, pandas 0.25.3.

Atualização : se eu substituir to_excelpor to_csv, o código funcionará perfeitamente.

mommomonthewind
fonte
11
o que é file_name? é uma string?
Quang Hoang
Sim, ele é. Apenas algo como'/data/myfile.xlsx'
mommomonthewind
o que acontece se você tentar d[k].to_excel(str(filename))?
Quang Hoang
Mesmo problema. Eu não acho que o problema esteja no file_name. Eu verifiquei e tenho certeza de que é um nome de arquivo válido.
Mommomonthewind 4/12/19
Eu obtive o mesmo erro usando o Openpyxl: 3.0.2 pandas 0.25.3 Python 3.8.1 (tags / v3.8.1: 1b293b6, 18 de dezembro de 2019, 23:11:46) [MSC v.1916 de 64 bits (AMD64)] O openpyxl 3.0.2 e a atualização do openpyxl para 3.0.3 corrigiram o problema, como outros relatam. Obrigado. Uma coisa que vou acrescentar: o bug do openpyxl 3.0.2 corrompeu o arquivo * .xlsx ao qual estava anexando, tornando-o ilegível e irrecuperável pelo Excel.
user39678

Respostas:

37

Eu tenho o mesmo problema com openpyxl=3.0.2,

Consulte esta resposta , eu rolo o openpyxl de volta para 3.0.1 (conda ou pip) e funciona.

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

ou

>>> pip uninstall openpyxl
>>> pip install openpyxl==3.0.1
Animeta
fonte
11
Acompanhado aqui: bitbucket.org/openpyxl/openpyxl/issues/1396/…
Shaheed Haque
Este problema foi corrigido no openpyxl 3.0.3.
zeeks 28/01