df_sentence = pd.DataFrame({
"senid" : np.arange(10,17),
"sentence" : [
"怎样用pandas实现merge?",
"Python之Numpy详细教程",
"怎么使用Pandas批量拆分与合并Excel文件?",
"怎样使用pandas的map和apply函数?",
"深度学习之tensorflow简介",
"tensorflow和numpy的关系",
"基于sklearn的一些机器学习的代码"
]
})
df_keyword = pd.DataFrame({
"keyid" : np.arange(5),
"keyword" : ["numpy", "pandas", "matplotlib", "sklearn", "tensorflow"]
})
原先的位置直接挤掉还是怎么说?
暂时按照挤下去的计算
代码如下:
import pandas as pd
import numpy as np
df_sentence = pd.DataFrame({
"senid": np.arange(10, 17),
"sentence": [
"怎样用pandas实现merge?",
"Python之Numpy详细教程",
"怎么使用Pandas批量拆分与合并Excel文件?",
"怎样使用pandas的map和apply函数?",
"深度学习之tensorflow简介",
"tensorflow和numpy的关系",
"基于sklearn的一些机器学习的代码"
]
})
df_keyword = pd.DataFrame({
"keyid": np.arange(5),
"keyword": ["numpy", "pandas", "matplotlib", "sklearn", "tensorflow"]
})
print(df_sentence)
for idx, row in df_sentence.iterrows():
sentence = row['sentence']
for _idx, _row in df_keyword.iterrows():
if _row['keyword'].lower() in sentence.lower():
row['sentence'] = _idx
df_sentence.loc[idx, 'sentence'] = _idx
print("###############################################")
print(df_sentence)
输出为
senid sentence
0 10 怎样用pandas实现merge?
1 11 Python之Numpy详细教程
2 12 怎么使用Pandas批量拆分与合并Excel文件?
3 13 怎样使用pandas的map和apply函数?
4 14 深度学习之tensorflow简介
5 15 tensorflow和numpy的关系
6 16 基于sklearn的一些机器学习的代码
###############################################
senid sentence
0 10 1
1 11 0
2 12 1
3 13 1
4 14 4
5 15 4
6 16 3
如有问题及时沟通
一种方法是用正则表达式,首先用|将keyword合并起来,形成一个正则表达式字符串,然后用apply的方法进行匹配,最后用merge匹配识别到的id
此方法是两个表构建某一相同字段,然后全连接,在做匹配结果筛选,此方法针对数据量不大的时候,逻辑比较简单,但是内存消耗较大
导入库
import pandas as pd
import numpy as np
import re
构建关键词
#关键词数据
df_keyword = pd.DataFrame({
"keyid" : np.arange(5),
"keyword" : ["numpy", "pandas", "matplotlib", "sklearn", "tensorflow"]
})
df_keyword
Python Pandas两个表格内容模糊匹配的实现
构建句子
df_sentence = pd.DataFrame({
"senid" : np.arange(10,17),
"sentence" : [
"怎样用pandas实现merge?",
"Python之Numpy详细教程",
"怎么使用Pandas批量拆分与合并Excel文件?",
"怎样使用pandas的map和apply函数?",
"深度学习之tensorflow简介",
"tensorflow和numpy的关系",
"基于sklearn的一些机器学习的代码"
]
})
df_sentence
Python Pandas两个表格内容模糊匹配的实现
建立统一索引
df_keyword['match'] = 1
df_sentence['match'] = 1
表连接
df_merge = pd.merge(df_keyword, df_sentence)
df_merge
Python Pandas两个表格内容模糊匹配的实现
关键词匹配
def match_func(row):
return re.search(row["keyword"], row["sentence"], re.IGNORECASE) is not None
df_merge[df_merge.apply(match_func, axis = 1)]
Python Pandas两个表格内容模糊匹配的实现
二、方法2
此方法对编程能力有要求,在大数据集上计算量较方法一小很多
构建字典
key_word_dict = {
row.keyword : row.keyid
for row in df_keyword.itertuples()
}
key_word_dict
{'numpy': 0, 'pandas': 1, 'matplotlib': 2, 'sklearn': 3, 'tensorflow': 4}
关键词匹配
def merge_func(row):
#新增一列,表示可以匹配的keyid
row["keyids"] = [
keyid
for key_word, keyid in key_word_dict.items()
if re.search(key_word, row["sentence"], re.IGNORECASE)
]
return row
df_merge = df_sentence.apply(merge_func, axis = 1)
结果展示
df_merge
Python Pandas两个表格内容模糊匹配的实现
匹配结果展开
df_result = pd.merge(
left = df_merge.explode("keyids"),
right = df_keyword,
left_on = "keyids",
right_on = "keyid")
df_result