[openpyxl] Que faire lorsque IllegalCharacterError apparaît dans pandas.DataFrame.to_excel

Conditions préalables

Le problème que vous souhaitez résoudre cette fois

import pandas
target_df = pandas.DataFrame(Données données)

Ainsi, lorsque j'essaye de sortir cette trame de données dans un fichier Excel,

---------------------------------------------------------------------------
IllegalCharacterError                     Traceback (most recent call last)
<ipython-input-88-d629d1ba2e9a> in <module>()
      1 # subset_df = subset_df.applymap(illegal_char_remover)
      2 
----> 3 subset_df.to_excel("./test.xlsx")

/Users/noname/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pandas/core/frame.py in to_excel(self, excel_writer, sheet_name, na_rep, float_format, columns, header, index, index_label, startrow, startcol, engine, merge_cells, encoding, inf_rep, verbose)
   1462         formatted_cells = formatter.get_formatted_cells()
   1463         excel_writer.write_cells(formatted_cells, sheet_name,
-> 1464                                  startrow=startrow, startcol=startcol)
   1465         if need_save:
   1466             excel_writer.save()

/Users/noname/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pandas/io/excel.py in write_cells(self, cells, sheet_name, startrow, startcol)
   1313                 column=startcol + cell.col + 1
   1314             )
-> 1315             xcell.value = _conv_value(cell.val)
   1316 
   1317             style_kwargs = {}

/Users/noname/.pyenv/versions/3.5.2/lib/python3.5/site-packages/openpyxl/cell/cell.py in value(self, value)
    290     def value(self, value):
    291         """Set the value and infer type and display options."""
--> 292         self._bind_value(value)
    293 
    294     @property

/Users/noname/.pyenv/versions/3.5.2/lib/python3.5/site-packages/openpyxl/cell/cell.py in _bind_value(self, value)
    189 
    190         elif isinstance(value, STRING_TYPES):
--> 191             value = self.check_string(value)
    192             self.data_type = self.TYPE_STRING
    193             if len(value) > 1 and value.startswith("="):

/Users/noname/.pyenv/versions/3.5.2/lib/python3.5/site-packages/openpyxl/cell/cell.py in check_string(self, value)
    154         value = value[:32767]
    155         if next(ILLEGAL_CHARACTERS_RE.finditer(value), None):
--> 156             raise IllegalCharacterError
    157         return value
    158 

IllegalCharacterError: 

Le problème de la colère. Je n'ai pas trouvé de solution même après la recherche, donc je la posterai.

approche

IllegalCharacter est défini dans openpyxl comme suit. (https://bitbucket.org/openpyxl/openpyxl/src/dad834128adcb5ca4330bd2bc4bc714b54ccfbb9/openpyxl/cell/cell.py?at=default&fileviewer=file-view-default Line69)

ILLEGAL_CHARACTERS_RE = re.compile(r'[\000-\010]|[\013-\014]|[\016-\037]')

Je pense donc que je devrais supprimer ce IllegalCharacter de la trame de données.

import re

# ILLEGAL_CHARACTERS_RE = re.compile(r'[\000-\010]|[\013-\014]|[\016-\037]')
ILLEGAL_CHARACTERS_RE = re.compile(r'[\000-\010]|[\013-\014]|[\016-\037]|[\x00-\x1f\x7f-\x9f]|[\uffff]')
def illegal_char_remover(data):
    """Remove ILLEGAL CHARACTER."""
    if isinstance(data, str):
        return ILLEGAL_CHARACTERS_RE.sub("", data)
    else:
        return data

target_df = target_df.applymap(illegal_char_remover)

Donc, si vous le supprimez, cette erreur ne se produira pas.

Cet automne (résolu)

Après avoir supprimé \ uffff, l'erreur ci-dessous n'apparaît plus.

~~ Malheureusement, même si vous supprimez cette erreur, au moment de l'exportation ~~

ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

Veuillez noter que vous devrez peut-être apporter des améliorations car vous vous fâcherez. ~~ ~~ Une histoire sur le nettoyage des données avant d'expérimenter. ~~

Postscript

Ceci est mon premier message, donc si vous avez des problèmes, veuillez le signaler. Puis.

Recommended Posts

[openpyxl] Que faire lorsque IllegalCharacterError apparaît dans pandas.DataFrame.to_excel
Que faire lorsque "SSL: CERTIFICATE_VERIFY_FAILED _ssl.c: 1056" apparaît en Python
Que faire lorsque "En-tête HTTP_HOST non valide" apparaît dans Django
Que faire lorsque l'avertissement "L'environnement est cohérent ..." apparaît dans l'environnement Anaconda
Que faire lorsqu'un avertissement apparaît autour de l'intégration de Python dans CheckHealth de Neovim
Que faire lorsque "TypeError: type de données non compris" apparaît dans numpy.zeros de python
Que faire lorsque [Errno 2] Aucun fichier ou répertoire de ce type n'apparaît en Python
Que faire quand Ubuntu plante
OSError: [Errno 40] Que faire lorsque Message trop long apparaît
Que faire si un avertissement de plate-forme non sécurisée apparaît lors de l'exécution de Python
Que faire quand UnicodeDecodeError se produit pendant read_csv dans pandas (pd.read_table ())
Que faire lorsque ModuleNotFoundError: Aucun module nommé'XXX 'ne se produit en Python
Que faire lorsque le type de valeur est ambigu en Python?
[Mémorandum] Que faire lorsqu'un avertissement apparaît après l'exécution de pip list
Que faire lorsque le résultat téléchargé via scrapy est en anglais
Que faire lorsque pyinstaller: erreur: argument --add-binary: valeur add_data_or_binary invalide: apparaît
[Docker] Que faire en cas d'erreur Impossible de trouver le git binaire apparaît
Que faire si aucune documentation Python trouvée pour ... apparaît dans pydoc
[OSX] [pyenv] Que faire lorsqu'une erreur SSL se produit dans pip
Que faire lorsqu'un message d'avertissement est affiché dans la liste des pip
Que faire si pipreqs aboutit à UnicodeDecodeError
Que faire quand une PermissionError dans tempfile.mkstemp se produit
Que faire pour obtenir une feuille de calcul Google en Python
Que faire lorsque "Erreur OS: [WinError 126] Le module spécifié est introuvable" apparaît dans la torche d'importation
[python] Que faire si vous obtenez une erreur avec send_keys dans le chrome sans tête
Que faire si «TypeError: must be string, not int…» apparaît lors de l'utilisation de strptime
Que faire lorsqu'une erreur SSL se produit avec pip dans l'environnement Windows10, miniconda, VScode
Que faire si l'abandon s'affiche lors de la saisie d'une vidéo de caméra dans OpenCV
Que faire lorsque le graphique n'apparaît pas sur le notebook Jupyter (IPython)
Que faire si NotADirectoryError: [Errno 20] Pas un répertoire: 'xdg-settings' apparaît dans le notebook jupyter
Que faire lorsque l'imitation est intégrée à Python
Que faire si l'installation de pip échoue dans Xcode 5.1
curl: (60) Que faire lorsque le certificat de l'émetteur n'est pas valide.
Que faire lorsque gdal_merge génère un fichier énorme
Que faire lorsque vous déclenchez ValueError, "type de hachage non pris en charge"
Que faire si une erreur de décodage Unicode se produit dans pip
Que faire lorsque "impossible d'importer le nom xxx" [Python]
Je veux faire quelque chose avec Python à la fin
Que faire quand n'est pas dans le fichier sudoers. Cet incident sera signalé.
[Python] Que faire quand Aucun module nommé "pyproj.datadir" n'apparaît lors de la création d'Exe avec PyInstaller
Que faire lorsque seule la fenêtre est affichée et que rien ne s'affiche dans le pygame
Que faire si vous obtenez une erreur lors de l'importation de matplotlib en Python (Mac)
Que faire lorsque "Erreur de type: doit être _socket.socket, pas socket" apparaît dans GAE
[AWS] Que faire lorsque vous souhaitez piper avec Lambda
Que faire lorsque ʻarguments [0] .scrollIntoView (); `échoue dans python sélénium
Procédures à suivre lorsque le japonais n'est pas affiché dans matplotlib
Que faire si pip donne une DistributionError dans Homebrew
Que faire lorsque la police PyCharm est étrange ou déformée
Que faire lorsqu'une erreur de suppression se produit lors de la mise à jour de conda
Que faire lorsque des séries booléennes non alignables sont fournies comme indexeur
Que faire si Combinaisons devient «couverture inconnue»
Que faire si une erreur 0xC0000005 se produit dans tf.train.start_queue_runners ()
Que faire lorsqu'une erreur se produit avec import _ssl
Que faire si l'installation du package échoue lors du déploiement sur heroku
Que faire si vous ne pouvez pas vous connecter en tant que root
ImportError: Pas de module Que faire quand on vous dit
Que faire s'il n'y a pas de réponse en raison des paramètres de proxy dans le scraping Web Python
Que faire lorsqu'un artefact manquant se produit dans un fichier jar qui n'est pas défini dans pom.xml
Que faire si vous obtenez une erreur lors de l'exécution de "certbot renouveler" dans l'environnement CakePHP