Как отформатировать текст во фрейме данных Pandas - PullRequest
0 голосов
/ 13 мая 2018

У меня есть кадр данных pandas:

df

id  Description
1   2694 A&W #5530 MONTREAL QC
2   ahi DOLLARAMA # 45 MONTREAL QC
3   PC - PAYMENT FROM - *****11*22

Я хочу отформатировать этот кадр данных, чтобы столбцы df["Description"] не имели #, -, * или numbers like:

id  Description

1   A&W MONTREAL QC
2   ahi DOLLARAMA MONTREAL QC
3   PC PAYMENT FROM

Я пытался использовать модуль python re.Но я все неправильно понимаю.

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Вы можете использовать панд .apply и re.sub для удаления [^A-Z ]+, т. Е .:

import pandas as pd
import re
test = ['2694 A&W #5530 MONTREAL QC', 'ahi DOLLARAMA # 45 MONTREAL QC', 'PC - PAYMENT FROM - *****11*22']

def change_me(content):
    content =  re.sub(r"[^A-Z ]+", "", content, 0, re.IGNORECASE)
    return re.sub(r"[ ]{2,}", " ", content, 0, re.IGNORECASE)

df = pd.DataFrame({'Desc':test})
df.Desc = df.Desc.apply(change_me)

                        Desc
0             AW MONTREAL QC
1  ahi DOLLARAMA MONTREAL QC
2            PC PAYMENT FROM

Демонстрация и объяснение регулярных выражений


PS:
Пожалуйста, прочитайте комментарий @ ami, .str.replace() - подходящая функция для такого рода задач.

0 голосов
/ 13 мая 2018

Попробуйте использовать регулярное выражение следующим образом:

df.Description = df.Description.str.replace(r'[\d#\-\*]', '')

Это дает

0               A&W  MONTREAL QC
1    ahi DOLLARAMA   MONTREAL QC
2             PC  PAYMENT FROM  
Name: foo, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...