參考部落格:python做資料匹配
最近做了乙個資料匹配的小任務,記錄一下實現的過程以便以後用到的時候能夠檢視
簡單來說,資料匹配就是對資料庫做join操作,將幾個資料庫做inner join
基本的操作學習可以參考上面的部落格鏈結,對pandas這個第三方庫有很好的介紹。更加詳細的資料可以參考pandas中文文件
下面記錄一下專案的實現過程
任務需要:
總共要處理三份資料,就是連線三份資料。
*****s(以dta格式儲存),mag(以txt形式儲存在檔案中),grid(以dta格式儲存)
*****s就是*****的資料報括*****的一系列的資訊,mag裡有*****和對應org的資訊,而grid就是org的資訊。
要進行匹配的部分就是*****s的title與mag裡的org,最後與grid裡的name匹配,最後的得到的要是*****s連線上grid的資訊。
實現過程:
第一步就是讀取資料:
import pandas as pd
import json #引入json是為了處理txt裡的資料
#讀取dta,csv格式的資料非常簡單讀取txt裡的資料需要對讀入的資料進行處理
df = pd.read_csv(
"xx"
)#讀入csv格式的資料
df = pd.read_stata(
"xx"
)#讀入dta格式的資料
#新建dataframe
df = pd.dataframe(columns =
, index =
)#讀取txt的資料
#因為資料特別大,用readlines會出錯
for line in
open
("xx"
,"r"
, encoding=
"utf-8"):
data = json.loads(line)
#讀入資料然後進行一系列處理..
....
#然後要合併幾個封裝資料的dataframe
df = pd.concat(l)
#l為乙個list
#資料清洗
df = df.dropna(
)#去除帶有空值的行
df = df.dropna(subset =
)#將範圍限定在subset裡
資料讀入並處理完成後要做匹配
#將df_left與df_right做inner join,on指定了匹配的字段
df = pd.merge(df_left, df_right, on=
'xx'
, how=
'inner'
)
至此匹配完成
因為資料處理的需要用到了fuzzywuzzy這個包做模糊匹配
記錄一下fuzzywuzzy的使用
要使用模糊匹配的話要匯入兩個包
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
幾種比較方式:
fuzz.token_sort_ratio(x, y)
#忽略順序進行比較
fuzz.token_set_ratio(x, y)
#忽略重複進行比較
fuzz.token_partial_ratio(x, y)
#部分比較
模糊匹配:
#xx為需要進行匹配的字段
possible = process.extract(
"xx"
, choice, limit=
10, scorer=fuzz.token_sort_ratio)
#將xx與choice裡的元素進行比較,選出匹配最接近的10個,scorer是排序器
用Python模糊匹配處理人工資料的匹配
生物資訊處理一些經過人工輸入的資料,往往有少量的錯誤。但是這些元資料往往要與結果資料統一分析,且非常之重要。資料量小,那就乙個乙個改吧,如果太多了,杯具了,怎麼辦?工作需要寫了乙個python小函式,用fuzzywuzzy模糊匹配技巧解決人工資料和標準資料的匹配問題。基本原理是先精確匹配,如果沒有,...
Python 正則匹配問題
前幾天,在用python正則做乙個匹配關鍵字的事情,發現了一些問題,順便提供一些解決方法。使用的是python re module re.search 與 re.match的區別 re.match 函式 總是從字串 開頭匹配 並返回匹配的字串的 match 物件 re.search 函式 對整個字串...
Python使用正則匹配處理文字
文字內容處理 import re pattern re.compile xmin n.xmax n.text pattern1 re.compile xmax pattern2 re.compile xmin with open 041.textgrid as lines 一次性讀入txt檔案,並把...