1
votes

Comment supprimer efficacement tous les numéros lors du nettoyage des données sur les pandas?

Voici mon ensemble de données

  id                                              descriptions
  0                             kartu debit indomaretcipete r
  1                                               tarikan atm
  2                                               tarikan atm
  3                                                 biaya adm
  4                                   trsf wsid indah lestari

Voici ce que j'ai fait

def cleaning(text):
    stops = {'10', '18','19', '20', '23881'}
    text = [word for word in text if not word in stops]
    text = " ".join(text)
return(text)

df['description_clean'] = df['description'].apply(cleaning)

Voici ce que j'ai obtenu

id                                             descriptions
0                       kartu debit 20 10 indomaretcipete r
1                                         tarikan atm 20 10
2                                         tarikan atm 19 10
3                                                 biaya adm
4                       trsf 18 10 wsid 23881 indah lestari


0 commentaires

3 Réponses :


3
votes

IIUC, vous devez supprimer les nombres du dataframe, utilisez ci-dessous:

df_new=df.replace('\d+ ','',regex=True)
print(df_new)

   id                   descriptions
0   0  kartu debit indomaretcipete r
1   1                 tarikan atm 10
2   2                 tarikan atm 10
3   3                      biaya adm
4   4        trsf wsid indah lestari

Pour une seule série: df ['descriptions'] = df ['descriptions']. replace ('\ d +', '', regex = True)

Remarque: j'ai ajouté un espace après d + dans l'expression régulière en fonction de votre exemple, vous pouvez vous en passer si vous le souhaitez.


0 commentaires

1
votes

Vous avez besoin de:

def replace_numbers(s):
    return re.sub(r'\d*', '', s)


df['description'] = df['description'].apply(replace_numbers)


0 commentaires

1
votes

Utilisez str .extractall et groupby.agg :

print(df)
   id                   descriptions
0   0  kartu debit indomaretcipete r
1   1                    tarikan atm
2   2                    tarikan atm
3   3                      biaya adm
4   4        trsf wsid indah lestari

Ou:

df['descriptions'] = [' '.join(re.findall('[a-zA-Z]+',s)) for s in df['descriptions']]

Ou:

df['descriptions'] = (df['descriptions'].str.replace('\d+','')
                                        .str.replace('  ',''))

df['descriptions'] = (df['descriptions'].str.extractall('([a-zA_Z]+)')
                                        .groupby(level=0).agg({0:' '.join}))


2 commentaires

Meilleure réponse jusqu'à présent, mais trop lente


@NabihBawazir String Les opérations dans les pandas sont généralement lentes. Vérifiez les autres solutions si elles accélèrent le processus.