Как эффективно сбросить все числа для очистки данных на пандах? - PullRequest
0 голосов
/ 04 февраля 2019

Вот мой набор данных

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

Вот что я сделал

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)

Вот что я получил

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

Это не эффективно, я продолжаю добавлять новые номераулучшить стоп-слова, как сделать за один раз?

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Вам нужно:

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


df['description'] = df['description'].apply(replace_numbers)
0 голосов
/ 04 февраля 2019

Используйте str.extractall и groupby.agg:

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

Или:

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

Или:

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

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
0 голосов
/ 04 февраля 2019

IIUC, вам нужно удалить числа из кадра данных, используйте ниже:

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

Только для одной серии: df['descriptions']=df['descriptions'].replace('\d+ ','',regex=True)

Примечание: я добавил пробел после d+ в регулярном выражении в зависимости от вашего примера, вы можете обойтись без него, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...