以下是全世界各個地方的位址,我們可以粗略看出,非常的不規範,中英文混雜,有拼音有漢字,大小寫組合,等等,3萬多條資料,像極了平時審核的資料,今天我們的目標就是從中挑出中國的地方。
首先,要確定我們的思路,含有中國地方(不論是拼音還是漢字)的字段全是我們要資料,因此,我們需要先建立乙個關鍵字集,裡面含有中國各地地名,以及其拼音。
接下來,我們就可以用python進行篩選。
先給大家介紹find()語句。
find() 方法查詢指定值的首次出現。如果找不到該值,則 find() 方法返回 -1。
引數說明:
string.find(value, start, end)
1、value:要檢索的值;
2、start:開始檢索的位置。預設是 0;
3、end:結束檢索的位置。預設是字串的結尾。
但是,find()的缺點便是不夠靈活,對於英文本母的大小寫是比較嚴格的,例如以下情況便無法查詢
必須輸入大寫的「d」方可查詢
因此,這個方法不適合在不規範的資料中進行查詢 。
第二個方法就是給大家介紹正規表示式,一般我們對它的使用常常出現在網路爬蟲中,去提取所需要的資訊。
引數說明:
findall (pattern, string [, flags])
1、pattern:正規表示式;
2、string:需要處理的字串;
3、flags:說明匹配模式,例如不區分大小寫re.i,詳細匹配模式說明見下表:
首先,讀取資料,並轉換為列表:
import pandas as pd
import numpy as np
citys = pd.read_excel(
"d:\\city.xls"
, header =
none
)citys = np.array(citys)
.tolist(
)goals = pd.read_excel(
"d:\\goal.xls"
, header =
none
)goals = np.array(goals)
.tolist(
)
說明:
因為本人習慣用pandas進行匯入和用列表來進行迴圈操作,所以我用array().tolist()進行轉換,如果想直接從dataframe中進行迴圈操作,可以用dataframe.iterrows()、dataframe.itertuples()、dataframe.iteritems()來實現。
建立乙個空的dataframe來儲存篩選資料:
mistake = pd.dataframe(columns =
['錯誤'
,'內陸城市'
])
最後,我們結合迴圈語句,對目標進行篩選查詢:
for city in citys:
b ="".join(city)
for goal in goals:
a ="".join(goal)
result = re.findall(b, a,flags=re.ignorecase)
iflen
(result)!=0
: new = pd.dataframe(
[[a, b]
], columns =
['錯誤'
,'內陸城市'])
true
)
引數說明:
str.join(sequence)
將序列中的元素(sequence)以指定的字元(str)連線生成乙個新的字串。
最後,去重匯出,就大功告成了
雖然我們從結果中發現,由於在一些單詞中包含部分城市的拼音,所以還是需要人工進行二次篩選,但相比較看三萬個資料,工作量已經大大減少,此外審核用的關鍵字集也是極為重要的一點,關鍵字集越精簡,篩選的結果便越好,所以小夥伴們需要根據自己的實際情況去使用。
用Stopwatch類來測試你的程式執行時間
上個月在專案中,由於我做的網頁後台計算步驟多,執行時間長,成了棘手問題,如此一來就要優化效能,找出瓶頸,重構 同事當時的建議是使用時間戳 timespan 後來乙個同事用的是診斷模式裡面乙個計時方法,現在看來都很彆扭,因為要 把時間減來減去,感覺不方便,不好用.今天我偶然的發現了stopwatch這...
python中format的用法 用住房來理解
學生黨在家沒事做寫的,就當練練文筆。format的格式化,我用生活中的住房子為例。print is a good format canglaoshi teacher out canglaoshi is a good teacherprint is a good format canglaoshi t...
Python用OpenCv捕捉你的頭像
效果圖 紅框是我的標記 需載入人臉模組 連線 提取碼 nscr 匯入opencv模組 import cv2 載入人臉模型,字串是檔案路徑 face cv2.cascadeclassifier c users admin desktop iamge haarcascade frontalface al...