我有一个使用以下代码加入的列表:
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'
但没有剥离
谢谢
答案 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()
返回了字符串的副本,其中删除了 leading
和trailing
个字符。
注意:
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已经给出了很好的答案。