如何从定界字符串中剥离值

时间:2018-12-18 10:57:14

标签: python python-3.x string pandas join

我有一个使用以下代码加入的列表:

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

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

不确定为什么要那样做,但是我使用了patternCore来同时过滤多个字符串。请注意,代理是一个dataFrame

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 :(得分:4)

由于Broker是熊猫数据框,因此可以将loc与布尔索引一起使用,然后使用pd.Series.tolist

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

与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'])

由于算法需要读取输入字符串中的每个字符,因此您应该期望最后一个选择的开销很大。

答案 1 :(得分:3)

我想提到一些到目前为止尚未涉及的问题。

  

我尝试过

     

patternCore.strip('DB')

     

'CITI|CS|DB|JPM|ML'

     

但没有任何东西被剥离

之所以不起作用,是因为strip()返回了字符串的副本,其中删除了 leadingtrailing个字符。 注意:

  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已经给出了很好的答案。