如果满足 python 中的任何条件值,则替换字符串

Replace string if it meets any condition values in python

我有一个pandas DataFrame,如果满足string = 'test', 'tests', [=23 的条件,我想删除所有值中的子字符串=]、'orig' 和 'new'。我可以使用 str.replace() 替换单个字符串条件的值,但不确定如何包含要测试和替换的其他条件。

见下文:

df_1 = pd.DataFrame({'id': ['001', '002', '003', '004', '005', '006', '007', '008'],
                     'color_value': ['blue_test', 'red', 'yellow_tests', 'orange_orig',
                     'blue_new','red', 'blue_testing', 'orange']})

对于一种情况,我可以做到:

term = 'test'
df_1['color_value'] = df_1['color_value'].str.replace(term,'')

我如何扩展它以包括删除 'tests'、'testing'、'orig' 和 'new'?

使用 regular expression:

term = 'test(s|ing)?'
df_1['color_value'] = df_1['color_value'].str.replace(term, '', regex=True)
print(df_1)

输出

    id color_value
0  001       blue_
1  002         red
2  003     yellow_
3  004      orange
4  005        blue
5  006         red
6  007       blue_
7  008      orange

来自 str.replace 上的文档:

pat str or compiled regex
String can be a character sequence or regular expression.

更新

要包含 "new", "origin",您可以使用另一个正则表达式:

term = 'test(s|ing)?|new|orig'
df_1['color_value'] = df_1['color_value'].str.replace(term, '', regex=True)
print(df_1)

输出

    id color_value
0  001       blue_
1  002         red
2  003     yellow_
3  004     orange_
4  005       blue_
5  006         red
6  007       blue_
7  008      orange

一般解

如果你有很多词,我建议你使用像 trrex 这样的库,它会根据一组词构建一个正则表达式:

import pandas as pd
import trrex as tx

df_1 = pd.DataFrame({'id': ['001', '002', '003', '004', '005', '006', '007', '008'],
                     'color_value': ['blue_test', 'red', 'yellow_tests', 'orange_orig',
                                     'blue_new', 'red', 'blue_testing', 'orange']})

term = tx.make(['test', 'tests', 'testing', 'orig', 'new'], prefix="", suffix="")
df_1['color_value'] = df_1['color_value'].str.replace(term, '', regex=True)
print(df_1)

输出

    id color_value
0  001       blue_
1  002         red
2  003     yellow_
3  004     orange_
4  005       blue_
5  006         red
6  007       blue_
7  008      orange

给定示例的模式是:

term = tx.make(['test', 'tests', 'testing', 'orig', 'new'], prefix="", suffix="")
print(term)

输出 (由 trrex 构建的模式)

(?:test(?:ing|s)?|new|orig)

免责声明

我是 trrex

的作者