这是我的问题(我正在研究 python):
我有一个包含列的数据框: Index(['job_title', 'company', 'job_label', 'description'], dtype='object')
我有一个包含 300 项技能的单词列表:
keywords = ["C++","Data Analytics","python","R", ............ "Django"]
我需要将这些关键字与每个职位描述相匹配,并获取一个新的数据框,说明 C++ 是否在职位描述 [0]...职位描述 [1]、职位描述 [2] 中是真还是假很快。
我的新数据框将是:
columns : ['job_title', 'company', 'description', "C++", "Data Analytics", ....... "Django"]
每列关键字如果与职位描述匹配(找到)或不匹配,则表示 true 或 false。
可能还有其他方法来构造数据帧(我正在听取建议)。
希望我的问题很清楚。我尝试使用正则表达式,但无法使其遍历每一行,我尝试使用“fnmatch”库进行循环,但无法使其工作。迄今为止最好的方法是:
df["microservice"]= df.description.str.contains("microservice")
df["cloud-based architecture"] = df.description.str.contains("cloud-based architecture")
df["service oriented architecture"] = df.description.str.contains("service oriented architecture")
但是,首先我无法让它循环遍历描述列的每一行,所以我必须为每个单词输入 300 倍的代码(这没有意义)。其次,通过这种方式,我遇到了诸如“R”之类的少数单词的问题,因为它在每个描述中找到字母 R,因此它在每个描述中都会成立。
最佳答案
迭代关键字列表并从描述中提取每一列:
for name in keywords:
df[name] = df['description'].apply(lambda x: True if name in x else False)
编辑:
这并不能解决 R 的问题。为此,您可以添加一个空格以确保它是隔离的,因此代码将是:
for name in keywords:
df[name] = df['description'].apply(lambda x: True if ' '+str(name)+' ' in x else False)
但这真的很丑而且没有优化。正则表达式应该可以解决问题,但我必须回顾一下:找到了! [ ]*+[str(name)]+[.?!] 更好! (而且更合适)
关于python - 将单词列表与职位描述列表匹配的最佳方法 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52041823/