Как заменить значения в столбце в пандах с помощью регулярных выражений и условных выражений - PullRequest
0 голосов
/ 30 августа 2018

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

Базовый пример;

index  col1  col2
1      yes   foobar
2      yes   foo
3      no    foobar

Используя следующее;

df.loc[df['col1'] == 'yes', 'col2'].replace({r'(fo)o(?!bar)' :r'\1'}, inplace=True, regex=True)

Я ожидал следующего результата;

index  col1  col2
1      yes   foobar
2      yes   fo
3      no    foobar

Однако, похоже, это не работает? Он не выдает никаких ошибок или settingwithcopy предупреждений, он просто ничего не делает. Есть ли альтернативный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Использование np.where:

df.assign(
    col2=np.where(df.col1.eq('yes'), df.col2.str.replace(r'(fo)o(?!bar)', r'\1'), df.col2)
)

  col1    col2
1  yes  foobar
2  yes      fo
3   no  foobar
0 голосов
/ 30 августа 2018

Во избежание цепных назначений присваивание назад и удаление inplace=True:

mask = df['col1'] == 'yes'
df.loc[mask, 'col2'] = df.loc[mask, 'col2'].replace({r'(fo)o(?!bar)' :r'\1'}, regex=True)

print (df)
  col1    col2
1  yes  foobar
2  yes      fo
3   no  foobar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...