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!
推薦閱讀:
- pandas map(),apply(),applymap()區別解析
- pandas中DataFrame數據合並連接(merge、join、concat)
- Python數據合並的concat函數與merge函數詳解
- Python Pandas數據合並pd.merge用法詳解
- pandas中關於apply+lambda的應用