仅当它位于方括号内时,我才希望删除出现V,I或VI:
输入:
VINE(PCI); BLUE(PI)
BLACK(CVI)
CINE(PCVI)
所需的输出:
VINE(PC); BLUE(P)
BLACK(C)
CINE(PC)
当我使用df['col'].str.replace('[PC]+([VI]+)', "")
时,它将替换括号内的所有内容。当我仅使用df['col'].str.replace('[VI]+', "")
时,它当然不起作用,因为它会删除所有其他出现的V和I。
在PC或VI的任意组合中,支架内仅包含这4个字母。
请问我在做什么错了?
谢谢
答案 0 :(得分:1)
对捕获组和回调使用str.replace
:
import re
df['col'] = df['col'].str.replace(
r'\((.*?)\)', lambda x: re.sub('[VI]', '', f'({x.group(1)})'))
或者,
df['col'] = df['col'].str.replace(r'\((P|PC|C)[VI]+\)',r'(\1)') # Credit, OP
print(df)
col
0 VINE(PC); BLUE(P)
1 BLACK(C)
2 CINE(PC)
答案 1 :(得分:0)
仅使用熊猫的另一种解决方案:
import pandas as pd
S = pd.Series(["VINE(PCI)", "BLUE(PI)", "BLACK(CVI)", 'CINE(PCVI)'])
S.str.split('[\(\)]').apply(lambda x : x[0] + "(" + x[1].replace("I", "").replace("V", "") + ")" + x[2])
0 VINE(PC)
1 BLUE(P)
2 BLACK(C)
3 CINE(PC)
dtype: object