Мои данные выглядят так:
df.head()
CLUID STEP
9995 1998-10-27-03.18.54.256142 orders/sign()
9996 9012-03-22-00.56.55.724614 settings/user(?section=:section)
9997 9012-03-22-00.56.55.724614 settings/plugins
9998 1998-10-27-03.18.54.256142 saving/transactions
9999 9012-03-22-00.56.55.724614 settings/electronicstorage
Я хочу удалить определенную подстроку из столбца STEP.
Я пробовал:
df['STEP'] = df['STEP'].replace({'(?section=:section)': ''}, regex=True)
который поднимает:
ошибка: неизвестный флаг в позиции 3
Ожидаемый результат:
CLUID STEP
9995 1998-10-27-03.18.54.256142 orders/sign()
9996 9012-03-22-00.56.55.724614 settings/user
9997 9012-03-22-00.56.55.724614 settings/plugins
9998 1998-10-27-03.18.54.256142 saving/transactions
9999 9012-03-22-00.56.55.724614 settings/electronicstorage
Помощь приветствуется.
Как спрашивает @MayankPorwal: чего бы вы хотели? Пожалуйста отредактируйте ожидаемый результат в вопросе.
@MayankPorwal Отредактировано.
Попробуйте без regex=True
.
@tevemadar Это ничего не делает. Уже пробовал раньше.
(?aiLmsux)
(Одна или несколько букв из набора «а», «и», «л», «м», «с», «у», «х».) [...]
(а еще есть (?aiLmsux-imsx:...)
)
Вот почему 3-я позиция неверна, (?s
на позициях 0-1-2 может быть что-то правильное, а следующее e
нет. (?section=:section)
не является допустимым регулярным выражением.
replace()
ищет точную строку (а не подстроку) без регулярного выражения, поэтому вам нужно регулярное выражение, просто экранируйте управляющие символы:
import pandas
df=pandas.DataFrame({"CLUID":["1998-10-27-03.18.54.256142","9012-03-22-00.56.55.724614","9012-03-22-00.56.55.724614"],
"STEP":["orders/sign()","settings/user(?section=:section)","settings/plugins"]})
print(df)
df['STEP'] = df['STEP'].replace({'\(\?section=:section\)': ''}, regex=True)
print(df)
Я вижу, что это на пару минут позже, но стоит упомянуть, что скобки тоже нужно экранировать.
Но как мне с этим справиться? Есть ли обходной путь?
@StanislavJirák Пока я не мог сказать, что должен делать код.
Я хочу удалить подстроку, как указано выше, из столбца.
Использование re.sub
может помочь. Обратная косая черта обрабатывает символ '?' как спец.
import pandas as pd
df = pd.DataFrame({'STEP': ["settings/user(?section=:section)", "orders/sign(/:orderIds)"]})
df['STEP'].apply(lambda x: re.sub('(\?section=:section)', '', str(x)))
На самом деле это работает и с replace
:
df['STEP'] = df['STEP'].replace({'(\?section=:section)': ''}, regex=True)
Пожалуйста, опубликуйте ожидаемый результат.