python - 检查特定字符串是否存在于文本中的第一个或第二个位置
问题描述
我正在尝试在数据框“名称”的整个列中查找字符串列表。如果特定字符串存在于第一个或第二个位置,那么它应该用该特定字符串替换列的文本值并将其存储在另一列中。
为此,我正在使用正则表达式。下面是我的代码。但是,在输出表中,我将“MEDICO SYSTEMS FUJI”匹配为“FUJI”,但我的要求是它存在于第三个位置,它应该返回“NA”。类似地,文本“SAFEAIR TERM LTD CONTRACTORS”与“LTD CONTRACTORS”匹配。它应该显示 NA 因为位置是第 3 位。
请从现有脚本和我想要的输出表中检查我当前的输出表。
df = pd.DataFrame({'Name': ['KK FUJI PARLIGHT','NORTHWINDS ABATEMENT LLC',
'SAFEAIR TERM LTD CONTRACTORS','MEDICO SYSTEMS FUJI','TOKAI','FUJI CONTRACTOR']})
strings = ['FUJI','NORTHWINDS ABATEMENT','LTD CONTRACTORS']
pattern = '|'.join(strings)
def pattern_searcher(search_str:str, search_list:str):
search_obj = re.search(re.compile(r'\b({0})\b'.format(search_list),flags=re.IGNORECASE), search_str)
if search_obj :
return_str = search_str[search_obj.start(): search_obj.end()]
else:
return_str = 'NA'
return return_str
df['matched_str'] = df['Name'].apply(lambda x: pattern_searcher(search_str=x, search_list=pattern))
电流输出:
Name matched_str
KK FUJI PARLIGHT FUJI
NORTHWINDS ABATEMENT LLC NORTHWINDS ABATEMENT
SAFEAIR TERM LTD CONTRACTORS LTD CONTRACTORS
MEDICO SYSTEMS FUJI FUJI
TOKAI NA
FUJI CONTRACTOR FUJI
期望的输出:
Name matched_str
KK FUJI PARLIGHT FUJI
NORTHWINDS ABATEMENT LLC NORTHWINDS ABATEMENT
SAFEAIR TERM LTD CONTRACTORS NA
MEDICO SYSTEMS FUJI NA
TOKAI NA
FUJI CONTRACTOR FUJI
解决方案
def trim_replace(sequence, target, replacement, n=2):
return [val if val != target else replacement for val in sequence.split()[:n]]
target_value = "TOP"
sequence = "BEA TOP LIST"
result = replace_in_first(sequence, target_value, "REPLACED")
print(result)
输出:
['BEA', 'REPLACED']
推荐阅读
- function - 使用 JOIN 将多个 IMPORTRANGES 拉入 SORT(ARRAYFORMULA({importrange1; importrange2; etc}
- python - 在 Apache 和 mod_wsgi 下运行的 Django 使用“虚拟”文件系统?
- python - 使用 finditer 和前瞻空正则表达式响应
- php - PHP MySQLi 更新失败
- sql-server - 为什么行大小很大?
- c# - 在 C# 中将具有大量数据的数据表转换为 Html 时的性能问题
- javascript - 根据另一个数组过滤数组并合并
- python-3.x - pip search 找到 tensorflow,但 pip install 没有
- javascript - 如何将带有画布的画布保存为没有黑色背景的斑点?
- php - 我需要帮助 laravel 5.4 权限被拒绝