Skip to content

Handle pandas dataframes with multi-line fields #413

@marcboulle

Description

@marcboulle

Description

Dans les dataframes pandas, certains champs peuvent être multi-lignes.
En particulier, dans le cas de jeux de données contenant des champs texte, c'est d'ailleurs souvent le cas.
Comme Khiops core ne gère pas les champs multi-lignes, cela produit des erreurs incompréhensibles.

Exemple: jeu de test Kaggle "Phishing Email Detection" https://www.kaggle.com/datasets/subhajournal/phishingemails

Questions/Ideas

Il suffit de préprocesser les data frames avec la ligne suivante

    # Replace end of lines by blanks in order to obtain mono-line text fields
    df = df.replace(['\r', '\n'],' ', regex=True)

Dans le cas de l'utilisation de l'API core, il faut préprocesser tout le jeu de données, avec un routine de type

def preprocess_dataset(input_file_name, output_file_name):
    """Preprocess text data to remove multi-line values"""
    df = pd.read_csv(input_file_name)
    # Replace end of lines by blanks in order to obtain mono-line text fields
    df = df.replace(['\r', '\n'],' ', regex=True)
    # Export using the tab separator
    df.to_csv(output_file_name, index=False)

Cela pourrait-faire l'objet d'une Q&A pour le traitement des bases de texte

Note: Khiops Core ne gère pas les champs multi-lignes pour les raisons suivantes:

  • gestion des erreurs
    • un champ multi-lignes est spécifié en utilisant des double-quote '"' en début et fin de champs
    • en cas d'erreur de spécification (double-quote final manquant), il n'y a pas de reprise sur erreur possible
      • avec python, une seule erreur de ce type provoque un crash indescriptible
      • il faut alors lire tout jusqu'à la fin de fichier
      • non robustesse: une seule erreur dans un fichier de très grande taille invalide tout un traitement
  • traitement des index de lignes
    • avec des champs multi-ligne, on n'a plus l'équivalence entre ligne et enregistrement identifié par un index de ligne: tout devient alors plus complexe à gérer et à manipuler (une erreur sur un enregistrement renvoie à son index de ligne...)
  • limites en volumétrie
    • un champs ne peut dépasser 1 Mbn une ligne ne peut dépasser 8 Mb
  • il n'est pas envisageable de faire évoluer Khiops core sur ce point, mais il faudra que ceci soit bien documenté

Metadata

Metadata

Assignees

Labels

Priority/0-HighTo do nowSize/HoursVery shortStatus/DoneThe issue has been addressed and merged to the dev branch

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions