45. Pandas实现模糊匹配Merge数据的方法

Pandas实现模糊匹配Merge数据的方法

import pandas as pd
import numpy as np
import re

1. 两份数据

# 关键词数据
df_keyword = pd.DataFrame({
    "keyid": np.arange(5),
    "keyword": ["numpy", "pandas", "matplotlib", "sklearn", "tensorflow"]
})
df_keyword
keyidkeyword
00numpy
11pandas
22matplotlib
33sklearn
44tensorflow
# 句子数据
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
senidsentence
010怎样用Pandas实现数据的Merge?
111Python之Numpy详细教程
212怎样使用Pandas批量拆分与合并Excel文件?
313怎样使用Pandas的map和apply函数?
414深度学习及TensorFlow简介
515Tensorflow和Numpy的关系
616基于sklearn的一些机器学习的代码

方法1:暴力笛卡尔积 + 过滤

新增数字完全一样的列

df_keyword["match"] = 1
df_sentence["match"] = 1
df_keyword
keyidkeywordmatch
00numpy1
11pandas1
22matplotlib1
33sklearn1
44tensorflow1
df_sentence
senidsentencematch
010怎样用Pandas实现数据的Merge?1
111Python之Numpy详细教程1
212怎样使用Pandas批量拆分与合并Excel文件?1
313怎样使用Pandas的map和apply函数?1
414深度学习及TensorFlow简介1
515Tensorflow和Numpy的关系1
616基于sklearn的一些机器学习的代码1

实现merge

结果行数 = A表行数 * B表行数

df_merge = pd.merge(df_keyword, df_sentence)
df_merge
keyidkeywordmatchsenidsentence
00numpy110怎样用Pandas实现数据的Merge?
10numpy111Python之Numpy详细教程
20numpy112怎样使用Pandas批量拆分与合并Excel文件?
30numpy113怎样使用Pandas的map和apply函数?
40numpy114深度学习及TensorFlow简介
50numpy115Tensorflow和Numpy的关系
60numpy116基于sklearn的一些机器学习的代码
71pandas110怎样用Pandas实现数据的Merge?
81pandas111Python之Numpy详细教程
91pandas112怎样使用Pandas批量拆分与合并Excel文件?
101pandas113怎样使用Pandas的map和apply函数?
111pandas114深度学习及TensorFlow简介
121pandas115Tensorflow和Numpy的关系
131pandas116基于sklearn的一些机器学习的代码
142matplotlib110怎样用Pandas实现数据的Merge?
152matplotlib111Python之Numpy详细教程
162matplotlib112怎样使用Pandas批量拆分与合并Excel文件?
172matplotlib113怎样使用Pandas的map和apply函数?
182matplotlib114深度学习及TensorFlow简介
192matplotlib115Tensorflow和Numpy的关系
202matplotlib116基于sklearn的一些机器学习的代码
213sklearn110怎样用Pandas实现数据的Merge?
223sklearn111Python之Numpy详细教程
233sklearn112怎样使用Pandas批量拆分与合并Excel文件?
243sklearn113怎样使用Pandas的map和apply函数?
253sklearn114深度学习及TensorFlow简介
263sklearn115Tensorflow和Numpy的关系
273sklearn116基于sklearn的一些机器学习的代码
284tensorflow110怎样用Pandas实现数据的Merge?
294tensorflow111Python之Numpy详细教程
304tensorflow112怎样使用Pandas批量拆分与合并Excel文件?
314tensorflow113怎样使用Pandas的map和apply函数?
324tensorflow114深度学习及TensorFlow简介
334tensorflow115Tensorflow和Numpy的关系
344tensorflow116基于sklearn的一些机器学习的代码

过滤出结果

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)]
keyidkeywordmatchsenidsentence
10numpy111Python之Numpy详细教程
50numpy115Tensorflow和Numpy的关系
71pandas110怎样用Pandas实现数据的Merge?
91pandas112怎样使用Pandas批量拆分与合并Excel文件?
101pandas113怎样使用Pandas的map和apply函数?
273sklearn116基于sklearn的一些机器学习的代码
324tensorflow114深度学习及TensorFlow简介
334tensorflow115Tensorflow和Numpy的关系

方法2:小表变字典做merge最后explode

构建要join的key:index的关系

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):
    # 新增一列,表示能匹配的keyids
    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
senidsentencematchkeyids
010怎样用Pandas实现数据的Merge?1[1]
111Python之Numpy详细教程1[0]
212怎样使用Pandas批量拆分与合并Excel文件?1[1]
313怎样使用Pandas的map和apply函数?1[1]
414深度学习及TensorFlow简介1[4]
515Tensorflow和Numpy的关系1[0, 4]
616基于sklearn的一些机器学习的代码1[3]

展开然后做merge

df_merge.explode("keyids")
senidsentencematchkeyids
010怎样用Pandas实现数据的Merge?11
111Python之Numpy详细教程10
212怎样使用Pandas批量拆分与合并Excel文件?11
313怎样使用Pandas的map和apply函数?11
414深度学习及TensorFlow简介14
515Tensorflow和Numpy的关系10
515Tensorflow和Numpy的关系14
616基于sklearn的一些机器学习的代码13
df_result = pd.merge(
    left = df_merge.explode("keyids"),
    right = df_keyword,
    left_on = "keyids",
    right_on = "keyid"
)
df_result
senidsentencematch_xkeyidskeyidkeywordmatch_y
010怎样用Pandas实现数据的Merge?111pandas1
112怎样使用Pandas批量拆分与合并Excel文件?111pandas1
213怎样使用Pandas的map和apply函数?111pandas1
311Python之Numpy详细教程100numpy1
415Tensorflow和Numpy的关系100numpy1
514深度学习及TensorFlow简介144tensorflow1
615Tensorflow和Numpy的关系144tensorflow1
716基于sklearn的一些机器学习的代码133sklearn1


版权声明:本文为lvlinjier原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。