Python Pandas兩個表格內容模糊匹配的實現

一、方法2

此方法是兩個表構建某一相同字段,然後全連接,在做匹配結果篩選,此方法針對數據量不大的時候,邏輯比較簡單,但是內存消耗較大

1. 導入庫

import pandas as pd
import numpy as np
import re

2. 構建關鍵詞

#關鍵詞數據
df_keyword = pd.DataFrame({
    "keyid" : np.arange(5),
    "keyword" : ["numpy", "pandas", "matplotlib", "sklearn", "tensorflow"]
})
df_keyword

3. 構建句子

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

 

4. 建立統一索引

df_keyword['match'] = 1
df_sentence['match'] = 1

5. 表連接

df_merge = pd.merge(df_keyword, df_sentence)
df_merge

6. 關鍵詞匹配

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)]

匹配結果如下 

二、方法2

此方法對編程能力有要求,在大數據集上計算量較方法一小很多

1. 構建字典

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}

2. 關鍵詞匹配

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)

3. 結果展示

df_merge

4. 匹配結果展開

df_result = pd.merge(
left = df_merge.explode("keyids"),
right = df_keyword,
left_on = "keyids",
right_on = "keyid")
df_result

總結

到此這篇關於Python Pandas兩個表格內容模糊匹配搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: