python - 无法生成列表以显示列表中的任何匹配项
问题描述
我正在尝试使数据框的一列与列表匹配(如果有)。为此创建了一个名为 return hits 的自定义函数。
def returnhits(a_list, long_string):
matches =[]
for match in a_list:
if any(word in long_string.split() for match in a_list):
matches.append(match)
return ' , '.join(matches)
qualification_list = ('Professional Certificate', 'NiTEC ', "Bachelor's Degree", 'Diploma', 'Advanced/Higher/Graduate Diploma', 'Post Graduate Diploma' , 'Professional Degree', "Master's Degree" , 'Doctorate (PhD)')
但是我无法产生预期的结果。
df['Qualifications'] = df['Other information'].apply(lambda x : returnhits(qualification_list, x))
理想情况下,如果文本中有匹配项,它将返回 NiTEC ,Professional Degree
解决方案
不要为此使用循环,使用pandas
正则表达式方法:
import re
df = pd.DataFrame({'Other information': ['something', ' blah blah NiTEC', 'other diploma']})
qualification_list = ('Professional Certificate', 'NiTEC', "Bachelor's Degree", 'Diploma', 'Advanced/Higher/Graduate Diploma', 'Post Graduate Diploma' , 'Professional Degree', "Master's Degree" , 'Doctorate (PhD)')
df['Qualifications'] = df['Other information'].str.extract('(%s)' % '|'.join(re.escape(s) for s in qualification_list), flags=re.IGNORECASE)
df
输出:
Other information Qualifications
0 something NaN
1 blah blah NiTEC NiTEC
2 other diploma diploma
推荐阅读
- python-3.x - 使用 python 类替换嵌套字典中的值
- laravel - Laravel 中的“未定义偏移量:1”错误。到底是怎么回事?
- javascript - ._where 将数组作为谓词值传递
- php - PHP - 当我可以通过 $_File 数组获取路径信息时,为什么要使用它
- c# - 必须如何将地址写入 api 控制器并在控制器中使用属性。ASP.NET 核心
- java - 如何在流布局中组织对象?
- javascript - Javascript函数不返回变量
- javascript - 曼德布罗集合中的噪声
- sql-server - 站点移动到第 3 方托管时出现 SQL Server Express 连接字符串错误
- javascript - 如果javascript中的值相同,如何再次使用math.random来获得不同的值