Использование регулярных выражений для удаления строки из столбца - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь удалить строку из столбца с помощью регулярных выражений и заменить.

                      Name

"George @ ACkDk02gfe" sold

Я хочу удалить " @ ACkDk02gfe"

Я пробовал несколько разных вариантов кода ниже, но я не могу удалить строку, которую хочу.

df['Name'] = df['Name'].str.replace('(\@\D+\"$)','')

Результат должен быть

George sold

Эта часть строки "ACkDk02gfe полностью случайна.

Ответы [ 6 ]

2 голосов
/ 14 июля 2020

Давайте попробуем использовать регулярное выражение с | («ИЛИ») и группа регулярных выражений:

df['Name'].str.replace('"|(\s@\s\w+)','', regex=True)

Вывод:

0    George sold
Name: Name, dtype: object

Обновлено

df['Name'].str.replace('"|(\s@\s\w*[-]?\w+)','')  

введите описание изображения здесь

Где df,

                         Name
0  "George @ ACkDk02gfe" sold
1    "Mike @ AisBcIy-rW" sold

Вывод:

0    George sold
1      Mike sold
Name: Name, dtype: object
1 голос
/ 14 июля 2020

Ваш шаблон и синтаксис неверны.

import pandas as pd

# set up the df
df = pd.DataFrame.from_dict(({'Name': '"George @ ACkDk02gfe" sold'},))

# use a raw string for the pattern
df['Name'] = df['Name'].str.replace(r'^"(\w+)\s@.*?"', '\\1')
0 голосов
/ 14 июля 2020

Это должно сделать для вас. Разделите строку на цепочку из whitespace,@,text immediately after @and whitespace after the text. Это приводит к list. удалите угловые скобки списка, разделяя элементы пробелом, используя .str.join(' ')

df.Name=df.Name.str.split('\s\@\s\w+\s').str.join(' ')



 0    George sold
0 голосов
/ 14 июля 2020
import re
ss = '"George @ ACkDk02gfe" sold'
ss = re.sub('"', "", ss)
ss = re.sub("\@\s*\w+", "", ss)
ss = re.sub("\s*", " ", ss)

George sold

Учитывая, что это общий формат вашего кода, вот что может помочь вам понять процесс, который я сделал. (1) заменить литерал " (2) заменить данное регулярное выражение \@\s*\w+ (означает, что литерал @ может сопровождаться пробелом / с, затем будет заменено буквенно-цифровое c слово с несколькими символами) (3) замена несколько пробелов с одним пробелом.

Вы можете обернуть функцию в этот процесс, который вы можете просто вызвать для столбца. Надеюсь, это поможет!

0 голосов
/ 14 июля 2020

Чтобы использовать регулярное выражение для замены, вам нужно импортировать re и использовать re.sub () вместо .replace ().

import re
                      Name

"George @ ACkDk02gfe" sold

df['Name'] = re.sub(r"@.*$", "", df['Name'])

должно работать.

0 голосов
/ 14 июля 2020

Я позволю кому-нибудь другому опубликовать ответ регулярного выражения, но это также можно сделать с помощью split. Я не знаю, насколько согласованы данные, на которые вы смотрите, но это будет работать для предоставленной строки:

df['Name'] = df['Name'].str.split(' ').str[0].str[1:] + ' ' + df['Name'].str.split(' ').str[-1]

output:

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