Модификация строки в подмножестве DataFrame Pandas - PullRequest
0 голосов
/ 15 апреля 2020

Мне трудно обновить строковое значение в подмножестве Pandas фрейма данных

В полевом действии я могу изменить столбец action, используя регулярные выражения с:

df['action'] = df.action.str.replace('([^a-z0-9\._]{2,})','')

Однако, если строка содержит заданное c слово, я не хочу его изменять, поэтому я попытался обновить только подмножество, например:

df[df['action'].str.contains('TIME')==False]['action'] = df[df['action'].str.contains('TIME')==False].action.str.replace('([^a-z0-9\._]{2,})','')

, а также с использованием .loc, например:

df.loc('action',df.action.str.contains('TIME')==False) = df.loc('action',df.action.str.contains('TIME')==False).action.str.replace('([^a-z0-9\._]{2,})','')

, но в обоих случаях ничего не обновляется. Есть ли лучший способ добиться этого?

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Попробуйте, это должно работать, я нашел это здесь

df.loc[df.action.str.contains('TIME')==False,'action'] = df.action.str.replace('([^a-z0-9\._]{2,})','')
1 голос
/ 15 апреля 2020

вы можете сделать это с помощью loc, но вы сделали это с первым столбцом, в то время как он должен индексироваться первым, и используя [], а не ()

mask_time = ~df['action'].str.contains('TIME') # same as df.action.str.contains('TIME')==False
df.loc[mask_time,'action'] = df.loc[mask_time,'action'].str.replace('([^a-z0-9\._]{2,})','')

пример:

#dummy df
df = pd.DataFrame({'action': ['TIME 1', 'ABC 2']})
print (df)
   action
0  TIME 1
1   ABC 2

см. Результат после использования вышеуказанного метода:

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