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
3 Réponses :
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.
Vous avez besoin de:
def replace_numbers(s):
return re.sub(r'\d*', '', s)
df['description'] = df['description'].apply(replace_numbers)
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}))
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.