Fonction pour enlever les caractères qui ne marche pas

claraxs Messages postés 9 Statut Membre -  
mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   -

Bonjour,

J'ai utilisé la fonction suivante pour retirer les caractères spéciaux de mon dataframe. Cependant, quand j'active la fonction, rien ne change et je n'arrive pas à savoir pourquoi. Pouvez-vous m'éclairer là-dessus svp?

b="!@#$"

def remove_character(x):
    for char in b:
            x=x.str.replace(char, " ")
    print(x)

remove_character(df)


Windows / Edge 107.0.1418.35

6 réponses

  1. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    Bonjour,

    Tu appelles la fonction remove_character en lui passant df comme argument

    Mais df est initialisé où ?????

    De plus ce serait plutôt

    x=x.replace(char," ")

    0
  2. claraxs Messages postés 9 Statut Membre
     

    Hello, 

    c'est le nom de mon dataframe :) . Il est initialisé dans mon code déjà. 

    Merci!

    0
  3. claraxs Messages postés 9 Statut Membre
     

    et ça ne marche non plus avec seulement x.replace(char, " ")..

    0
  4. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    En tout cas, ça, ça marche:

    x='abc'
    x=x.replace('a','d')
    

    Faudrait voir ce que contient df

    Ça se présente comme une chaine de caractères, comme  ma variable x ci-dessus ?

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     

    bonjour,

    peux-tu partager un exemple complet, que nous puissions tester?

    0
  7. mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     

    Bonjour,

    La méthode pandas.DataFrame.replace existe bien, mais ne fonctionne pas comme str.replace (voir la documentation pour comprendre ce que ça fait). C'est pour ça que ça ne fait pas ce que tu veux.

    Ici, une approche possible consiste à utiliser pandas.DataFrame.applymap :

    import pandas as pd
    
    def clean(x):
        if isinstance(x, str):
            return "".join(a for a in x if a not in set("!@$"))
        else:
            return x
    
    df = pd.DataFrame(["a!b@c$", "d!e@f$"])
    df.applymap(clean)
    print(df)

    Résultat : 

         0
    0  abc
    1  def

    Bonne chance

    0