使用str.contains 创建一个布尔索引来屏蔽系列,然后使用str.replace 替换您的子字符串:
In [172]:
df = pd.DataFrame({'raw_parameter_name':['ABCD;MEAN', 'EFGH;MEAN', '1234;MEAN', 'sdasd;MEAT']})
df
Out[172]:
raw_parameter_name
0 ABCD;MEAN
1 EFGH;MEAN
2 1234;MEAN
3 sdasd;MEAT
In [173]:
df.loc[df['raw_parameter_name'].str.contains(';MEAN$'), 'raw_parameter_name'] = df['raw_parameter_name'].str.replace('MEAN', 'X-BAR')
df
Out[173]:
raw_parameter_name
0 ABCD;X-BAR
1 EFGH;X-BAR
2 1234;X-BAR
3 sdasd;MEAT
这里匹配子字符串';MEAN' 存在的位置,$ 是终止符号
布尔掩码如下所示:
In [176]:
df['raw_parameter_name'].str.contains(';MEAN$')
Out[176]:
0 True
1 True
2 True
3 False
Name: raw_parameter_name, dtype: bool
时间
对于 40,0000 行 df,使用 str.replace 比使用 apply 更快:
In [183]:
import re
%timeit df['raw_parameter_name'].apply(lambda x: re.sub(';MEAN$',';X-BAR',x))
%timeit df['raw_parameter_name'].str.replace('MEAN', 'X-BAR')
1 loops, best of 3: 1.01 s per loop
1 loops, best of 3: 687 ms per loop