web-dev-qa-db-fra.com

pandas.ExcelWriter ValueError: le mode d'ajout n'est pas pris en charge avec xlsxwriter

Je souhaite ajouter des enregistrements à un fichier Excel et j'utilise pandas.ExcelWriter pour ce faire ( http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.ExcelWriter.html?highlight=excelwriter#pandas.ExcelWriter ):

import pandas as pd                                                     

df = pd.DataFrame(data={'a':[4], 'b':['corn'], 'c':[0.5]})              

with pd.ExcelWriter("test.xlsx", mode='a') as writer: 
            df.to_Excel(writer) 

a, b, c sont les noms de titres de test.xlsx

exécutez ce programme, augmentez une valeurError:

ValueError                                Traceback (most recent call last)
<ipython-input-3-c643d22b4217> in <module>
----> 1 with pd.ExcelWriter("test.xlsx", mode='a') as writer:
      2     df.to_Excel(writer)
      3 

~/anaconda/lib/python3.6/site-packages/pandas/io/Excel.py in __init__(self, path, engine, date_format, datetime_format, mode, **engine_kwargs)
   1935 
   1936         if mode == 'a':
-> 1937             raise ValueError('Append mode is not supported with xlsxwriter!')
   1938 
   1939         super(_XlsxWriter, self).__init__(path, engine=engine,

ValueError: Append mode is not supported with xlsxwriter!

Je ne sais pas pourquoi?

5
Xu Zhoufeng

Essayez avec ceci:

with pd.ExcelWriter("existing_file_name.xlsx", engine="openpyxl", mode="a") as writer:
    df.to_Excel(writer, sheet_name="name", startrow=num, startcol=num)

Vous devez spécifier le moteur comme "openpyxl".

7

Comme le dit le retraçage, ValueError: Append mode is not supported with xlsxwriter!

Je ne peux pas répondre à votre question, pourquoi, ceci est une décision des développeurs Pandas.

Mais j'ai pu faire fonctionner votre cas d'utilisation avec Pandas 0.24 et openpyxl:

df = pd.DataFrame(data={'a':[4], 'b':['corn'], 'c':[0.5]})              

with pd.ExcelWriter("test.xlsx", mode='a') as writer: 
            df.to_Excel(writer) 
2
Josh Friedlander

Essayez de spécifier le "moteur" comme openpyxl:

with pd.ExcelWriter("test.xlsx", engine='openpyxl', mode='a') as writer:
    df.to_Excel(writer)
1
Jeremy Lloyd

hum, je suis presque sûr que vous ne pourriez pas utiliser la fonction ajouter à un fichier xlsx existant avec xlsxwriter, car la bibliothèque xlsxwriter est uniquement destinée à l'écriture de fichiers Excel

Voir le problème sur Github

afin que vous puissiez utiliser openpyxl ou mieux écrire votre programme pour faire cette fonction ..

mais si vous regardez le code à l'intérieur de ce libray, il lit simplement le fichier dans un environnement temporaire avant d'écrire le fichier final, ce n'est pas un vrai ajout ...

0
Frenchy