Как удалить значение из строки с разделителями - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть список, к которому я присоединился, используя следующий код:

patternCore = '|'.join(list(Broker['prime_broker_id']))

patternCore
'CITI|CS|DB|JPM|ML'

Не уверен, почему я так поступил, но я использовал patternCore для фильтрации нескольких строк одновременно.Обратите внимание, что брокер является фреймом данных

Broker['prime_broker_id']
29    CITI
30      CS
31      DB
32     JPM
33      ML
Name: prime_broker_id, dtype: object

Теперь я собираюсь удалить одну строку.Скажем, я хотел бы раздеть 'DB'.Как я могу это сделать, пожалуйста?

Я пробовал это

patternCore.strip('DB')
'CITI|CS|DB|JPM|ML'

, но ничего не снято

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

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

Я пробовал это

patternCore.strip('DB')

'CITI|CS|DB|JPM|ML'

но ничего не удаляется

Причина, по которой это не сработало, заключалась в том, что strip() возвращает копию строки с символами leading и trailing удалено.ПРИМЕЧАНИЕ:

  1. Не символы в где-либо в середине.
  2. Аргумент chars не является префиксом или суффиксом;скорее, все комбинации его значений отбрасываются

Здесь вы указали символы аргумента как 'DB'.Таким образом, если бы ваша строка была чем-то вроде 'CITI|CS|JPM|ML|DB', ваш код работал бы частично (канал в конце остался бы).

Но в любом случае это не очень хорошая практика.Потому что это обрезало бы что-то вроде 'DCITI|CS|JPM|MLB' до 'CITI|CS|JPM|ML' или 'CITI|CS|JPM|ML|BD' до 'CITI|CS|JPM|ML|'.

Я хотел бы обрезать 'DB'.

Для этой части @jpp уже дал хороший ответ.

0 голосов
/ 18 декабря 2018

Поскольку Broker - это фрейм данных Pandas, вы можете использовать loc с логическим индексированием, а затем использовать pd.Series.tolist:

mask = Broker['prime_broker_id'] != 'DB'
patternCore = '|'.join(Broker.loc[mask, Broker['prime_broker_id']].tolist())

AБолее общее решение, которое работает с объектами, отличными от фреймов данных Pandas, заключается в использовании списочного понимания с условием if:

patternCore = '|'.join([x for x in Broker['prime_broker_id'] if x != 'DB'])

Не возвращаясь к входным рядам, используя ту же идею, которую вы можете разделить ивоссоединение:

patternCore = 'CITI|CS|DB|JPM|ML'
patternCore = '|'.join([x for x in patternCore.split('|') if x != 'DB'])

Вы должны ожидать, что последний вариант будет дорогостоящим, поскольку ваш алгоритм требует чтения каждого символа во входной строке.

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