Добавьте пробел, используя str replace для серии pandas - PullRequest
0 голосов
/ 11 февраля 2020

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

ввод

          box
0      11M000
1  11M000(MU)

желаемый вывод

          box
0      11M000
1  11M000 (MU)

код

import pandas as pd
data={'box':['11M000','11M000(MU)']}
df = pd.DataFrame(data)
df['box'] = df['box'].str.replace('.(MU)'," (MU)", regex=True)

что Я сейчас получаю

0          11M000
1    11M000 (MU))

Ответы [ 5 ]

1 голос
/ 11 февраля 2020

regex=True означает, что первый шаблон является регулярным выражением. В регулярных выражениях круглые скобки являются частью синтаксиса.

Значение .(MU), поскольку регулярное выражение соответствует точно тому, что соответствует регулярному выражению .MU (круглые скобки используются для группировки, и вы не повторяете свою группу или что-либо подобное, поэтому они ничего не делают здесь). Таким образом, он получает (MU (совпадение точек () с 11M000 (MU), без закрывающей.

Если вы хотите это исправить, просто измените regex=True на regex=False - регулярные выражения медленны они используются для поиска шаблонов, а вы просто находите нормальную подстроку.

1 голос
/ 11 февраля 2020

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

import pandas as pd
data={'box':['11M000','11M000(MU)']}
df = pd.DataFrame(data)
df['box'] = df['box'].str.replace(".\(MU", " (MU", regex=True)
print(df)
1 голос
/ 11 февраля 2020

Просто замените первую скобу

df['box'].str.replace('(', ' (')
0         11M000
1    11M000 (MU)
1 голос
/ 11 февраля 2020

Escape () в регулярном выражении, потому что специальные символы и замена на обратную ссылку на \\1, regex=True является значением по умолчанию в Series.str.replace, поэтому следует пропустить:

data={'box':['11M000','11M000(MU)']}
df = pd.DataFrame(data)
df['box'] = df['box'].str.replace('(\(MU\))'," \\1")
print (df)
           box
0       11M000
1  11M000 (MU)

Без решения регулярных выражений с параметром regex=False и без выхода ():

df['box'] = df['box'].str.replace('(MU)'," (MU)", regex=False)
print (df)
           box
0       11M000
1  11M000 (MU)
1 голос
/ 11 февраля 2020
df['box'] = df['box'].str.replace('('," (")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...