python資料清洗系列之字串處理詳解

高洛峰
發布: 2017-02-13 13:32:12
原創
2277 人瀏覽過

前言

資料清洗是一項複雜且繁瑣(kubi)的工作,同時也是整個資料分析過程中最為重要的環節。有人說一個分析專案80%的時間都在清洗數據,聽起來有些匪夷所思,但實際的工作確實如此。資料清洗的目的有兩個,第一是透過清洗讓資料可用。第二是讓資料變的更適合進行後續的分析工作。換句話說就是有」髒」資料要洗,乾淨的資料也要洗。

在資料分析中,特別是文字分析中,字元處理需要耗費極大的精力,因而了解字元處理對於資料分析而言,也是一項很重要的能力。

字串處理方法

首先我們先了解下都有哪些基礎方法

python資料清洗系列之字串處理詳解

首先我們了解下字串的分割split方法

rrrereee分的結果:

['i like apple', 'i like bananer']

str='i like apple,i like bananer'
print(str.split(','))
登入後複製

根據空格分割的結果:

['i' ', 'like', 'bananer']

print(str.split(' '))
登入後複製

兩個查找結果都為:

12

rr

結果為:

4

connt用於統計目標字串的頻率


print(str.index(','))
print(str.find(','))
登入後複製


' , 'like', 'bananer']

這裡replace把逗號替換為空格後,在用空格對字符串進行分割,剛好能把每個單字取出來。

除了常規的方法以外,更強大的字元處理工具費正規表示式莫屬了。


正規表示式


在使用正規表示式前我們還要先了解下,正規表示式中的諸多方法。


下面我來看下個方法的使用,首先了解下match和search方法的區別

print(str.count('i'))
登入後複製

結果

ya種形式的pettern符合規則下,match和search方法的回傳結果是相同的python資料清洗系列之字串處理詳解

此時如果把pattern改為

print(str.replace(',', ' ').split(' '))
登入後複製

match則回傳none,search回傳結果為:

match則回傳none,search回傳結果為:


match則回傳none smarter than dogs

smarter


接下來我們了解下其他方法的使用

str = "Cats are smarter than dogs"
pattern=re.compile(r'(.*) are (.*?) .*')
result=re.match(pattern,str)

for i in range(len(result.groups())+1):
 print(result.group(i))
登入後複製

結果為:


138-9592-55923592-5592實現提取號碼的目的。



我們還可以進一步對號碼的橫桿進行替換

pattern=re.compile(r'are (.*?) .*')
登入後複製

結果為:


13895925592


13895925592

結果為:

['5', '5', '5']

正則表達式的整體內容比較多,需要我們對匹配的字符串的規則有足夠的了解,下面是具體的匹配規則。


矢量化字串函數


清理待分析的散亂資料時,常常需要做一些字串規整化工作。

str = "138-9592-5592 # number"
pattern=re.compile(r'#.*$')
number=re.sub(pattern,'',str)
print(number)
登入後複製

結果為:


可以透過規整合的一些方法對資料做初步的判斷,例如用contains 判斷每個資料中是否含有關鍵字

python資料清洗系列之字串處理詳解

也可以將字串進行分拆,把需要的字串提取出來

print(re.sub(r'-*','',number))
登入後複製

结果为:

chen [(8622, xinlang, com)]
li [(120, qq, com)]
sun [(5243, gmail, com)]
wang [(5632, qq, com)]
zhao NaN
dtype: object

此时加入我们需要提取邮箱前面的名称

print(result.str.get(0))
登入後複製

结果为:

python資料清洗系列之字串處理詳解

或者需要邮箱所属的域名

print(result.str.get(1))
登入後複製

结果为:

python資料清洗系列之字串處理詳解

当然也可以用切片的方式进行提取,不过提取的数据准确性不高

data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com',
    'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'})
print(data.str[:6])
登入後複製

结果为:

python資料清洗系列之字串處理詳解

最后我们了解下矢量化的字符串方法

python資料清洗系列之字串處理詳解

更多python資料清洗系列之字串處理詳解相关文章请关注PHP中文网!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板