如果满足 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'?
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
的作者
我有一个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'?
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
的作者