1. 程式人生 > >pandas 學習彙總15 - str函式(全面 tcy)

pandas 學習彙總15 - str函式(全面 tcy)

str函式   2018/12/5

彙總52個str函式,本人經過全部測試,簡單的容易理解的沒寫例程,你可根據簡表進行測試;複雜難以理解的

都附加有例程,共有12個例程。簡表註釋內容根據測試結果編寫,而不是按簡單的翻譯,有時是難以理解的。

1.函式表

No 字串處理 類似Python中str忽略Na;適用於Series / Index
0 使用方式:s.str.cat() 返回序列索引或其他
1 capitalize() 字串轉大寫
2 cat([others, sep, na_rep, join]) 用分隔符連線字串;返回str或原物件構架
3 center(width[, fillchar]) 用附加字元填充字串的左側和右側
4 contains(‘'is') 判斷字串中是否包含子串
5 count(pat[, flags]) 計算字串中子串出現次數
6 decode(encoding[, errors])
位元組解碼
7 encode(encoding[, errors]) 字串編碼
8 endswith(pat[, na]) 測試字串結尾是否是特定子串 true
9 extract(pat[, flags, expand]) 從正則表示式pat中提取第一個匹配字元;結果為1個字元
10 extractall(pat[, flags]) 從正則表示式pat提取所有匹配的,返回組
11 find(sub[, start, end]) 查詢子串首索引,子串包含在[start:end]
12 findall(pat[, flags]) 查詢所有符合正則表示式的字元,以陣列形式返回
13 get(i) 從指定位置提取字元
14 get_dummies([sep]) 用sep拆分每個字串,返回一個虛擬/指示變數框
15 index(sub[, start, end]) 子串最低索引,子串範圍[start:end];
   - 任何一個系列中的元素中無子串引發異常
16 isalnum() 檢查所有字元是否為字母數字
17 isalpha() 檢查是否都是字母
18 isdecimal() 檢查是否都是十進位制
19 isdigit() 檢查是否都是數字
20 islower() 檢查是否都是小寫
21 isnumeric() 檢查是否都是數字
22 isspace() 檢查是否都是空格
23 istitle() 檢查是否都是標題
24 isupper() 檢查是否都是大寫
25 join(sep) 用分隔符連線所有字元;同一級有非str返回Na
26 len() 計算每個字串的長度
27 ljust(width[, fillchar]) 使用附加字元填充字串的右側
28 lower() 字串轉小寫
29 lstrip([to_strip]) 左側刪除空格(包括換行符)或其他str
30 match(pat[, case, flags, na, …]) 確定每個字串是否與正則表示式匹配。
31 normalize(form) 返回字串的Unicode普通表單
32 pad(width[, side, fillchar]) 指定左或右填充字元補齊字串
33 partition([pat, expand]) 分隔符拆分為3部分,分隔符左,分隔符,分隔符右
34 repeat(repeats) 重複每個元素指定的次數
35 replace(a,b) 將值a替換為值b。
36 rfind(sub[, start, end]) 右邊查詢子串索引,子串包含在[start:end]
37 rindex(sub[, start, end]) 返回每個元素中子串的最高索引,子串範圍[start:end]
   - 任何一個查詢不到則異常
38 rjust(width[, fillchar]) 使用附加字元填充字串的左側
39 rpartition([pat, expand]) 右拆分成3部分含分隔符
40 rsplit([pat, n, expand]) 分隔符字串右邊拆分字串
41 rstrip([to_strip]) 右側刪除空格(包括換行符)
42 slice([start, stop, step]) 切片擷取字串
43 slice_replace([start, stop, repl]) 用另一個值替換字串的位置切片;比較複雜看例項
44 split(['', n, expand]) 按分隔符或子串拆分字串
45 startswith('st') 測試字串開頭是否匹配子串True
46 strip('') 刪除字串左右空白(包括換行符)或刪除其他左右字串
47 swapcase() 變換字母大小寫
48 title() 字串轉標題
49 translate(table[, deletechars]) 通過對映表對映字串中的所有字元
50 upper() 字串轉大寫
51 wrap(width, **kwargs) 長字串換行,#結果插入換行符\n
52 zfill(width) 用0填充字串的左側

 2例項

text="this is string example!"
s=pd.Series(text.split())

# 0 this
# 1 is
# 2 string
# 3 example!
# dtype: object

# 例項1:index
s.str.index('s')#必須每個元素中都含有‘s',:否則異常  
# 例項2:translate字串對映表 
intab='aeiou'
outtab='12345'
trantab=str.maketrans(intab,outtab)
# {97: 49, 101: 50, 105: 51, 111: 52, 117: 53}

s.str.translate(trantab)
# 0 th3s
# 1 3s
# 2 str3ng
# 3 2x1mpl2!
# dtype: object  
# 例項3:
s.str.split('i')#拆分

# 0 [th, s]
# 1 [, s]
# 2 [str, ng]
# 3 [example!]
# dtype: object  
# 例項4:抽取匹配的字元串出來,注意要加上括號,把你需要抽取的東西標註上 
s.str.extract("([d-z])")#提取第一個匹配字元
# 0
# 0 t
# 1 i
# 2 s
# 3 e

# 例項5:
s.str.extractall("([d-z])")#提取所有匹配字元

#            0
#   match
# 0  0       t
#    1       h
#    2       i
#    3       s
# 1  0       i
#    1       s
# 2  0       s
#    1       t
#    2       r
#    3       i
#    4       n
#    5       g
# 3  0       e
#    1      x
#    2      m
#    3      p
#    4      l
#    5      e
# 例項6:unicodedata.normalize(form,unistr )
# 返回Unicode字串unistr的普通表單表單。
# 表單的有效值為 “NFC”,“NFKC”,“NFD”和“NFKD”。

# 正規形式D(NFD)也稱為規範分解,並將每個字元轉換為其分解形式。
# 普通形式C(NFC)首先應用規範分解,然後再次組合預組合字元。
# 普通形式KD(NFKD)將應用相容性分解,即將所有相容性字元替換為其等效字元。
# 正常形式KC(NFKC)首先應用相容性分解,然後是規範組合物。

import unicodedata
unicodedata.normalize('NFD', '\u00C7').encode('utf-8')# 'Ç'
unicodedata.normalize('NFD', '\u0043') # 'C'
unicodedata.normalize('NFD', '\u0327') # '̧'
unicodedata.normalize('NFD', '\u0043\u0327') # 'Ç'

unicodedata.normalize('NFD', '\u00C7').encode('ascii','ignore')#b'C'
b1=unicodedata.normalize('NFD', '\u00C7').encode('ascii','ignore')
b1.decode()# 'C'

title = u"Klüft skräms inför på fédéral électoral große"
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
# 'Kluft skrams infor pa federal electoral groe'  
# 例項7:
v=s.str.encode('utf-8')
# 0 b'this'
# 1 b'is'
# 2 b'string'
# 3 b'example!'
# dtype: object

v.str.decode('utf-8')
# 0 this
# 1 is
# 2 string
# 3 example!
# dtype: object

# 例項8:
s.str.findall("[a-z]")

# 0 [t, h, i, s]
# 1 [i, s]
# 2 [s, t, r, i, n, g]
# 3 [e, x, a, m, p, l, e]
# dtype: object  
# 例項9: 
s.str.match("[d-z]")
# 0 True
# 1 True
# 2 True
# 3 True
# dtype: bool  
# 例項10:
s.str.join('-')

# 0 t-h-i-s
# 1 i-s
# 2 s-t-r-i-n-g
# 3 e-x-a-m-p-l-e-!

s1 = pd.Series([['Tom', 'Bob', 'Jim'],[1.1, 2.2, 3.3],['s1', np.nan, 's2'],
['s3', 4.5, 's4'], ['s5', ['s6', 's7'], 's8']])
# 0 [Tom, Bob, Jim]
# 1 [1.1, 2.2, 3.3]
# 2 [s1, nan, s2]
# 3 [s3, 4.5, s4]
# 4 [s5, [s6, s7], s8]
# dtype: object

s1.str.join('-')
# 0 Tom-Bob-Jim
# 1 NaN
# 2 NaN
# 3 NaN
# 4 NaN  
#例項11:字串連線 
s = pd.Series(['a', 'b', np.nan, 'd'])
s.str.cat(sep=' ', na_rep='?') # 'a b ? d'

s.str.cat(['A', 'B', 'C', 'D'], sep=',')
# 0 a,A
# 1 b,B
# 2 NaN
# 3 d,D
# dtype: object

s.str.cat(['A', 'B', 'C', 'D'], sep=',', na_rep='-')
# 0 a,A
# 1 b,B
# 2 -,C
# 3 d,D
# dtype: object

t = pd.Series(['D', 'A', 'B', 'C'], index=[4, 1, 2, 3])
s.str.cat(t, join=None, na_rep='-')
# 0 aD
# 1 bA
# 2 -B
# 3 dC

s.str.cat(t, join='left', na_rep='-')
# 0 a-
# 1 bA
# 2 -B
# 3 dC
# dtype: object

s.str.cat(t, join='outer', na_rep='-')
# 0 a-
# 1 bA
# 2 -B
# 3 dC
# 4 -D
# dtype: object

s.str.cat(t, join='inner', na_rep='-')
# 1 bA
# 2 -B
# 3 dC
# dtype: object

s.str.cat(t, join='right', na_rep='-')
# 4 -D
# 1 bA
# 2 -B
# 3 dC
# dtype: object  
#例項12: 
s = pd.Series(['a', 'ab', 'abc', 'abdc', 'abcde'])

# 0 a
# 1 ab
# 2 abc
# 3 abdc
# 4 abcde
# dtype: object

# 指定“start”,意思是將“start”替換為“respont”,直到字串的末尾
s.str.slice_replace(1, repl='X')
# 0 aX
# 1 aX
# 2 aX
# 3 aX
# 4 aX
# dtype: object

# 只指定‘top’,這意味著將字串的開頭替換為‘Stop’,其餘的字串將包括在內
s.str.slice_replace(stop=2, repl='X')
# 0 X
# 1 X
# 2 Xc
# 3 Xdc
# 4 Xcde
# dtype: object


# 指定‘start’和‘top’,這意味著從‘start’到‘top’的片段被替換為‘repl’。“開始”和“停止”之前或之後的所有內容都按原樣包括在內。
s.str.slice_replace(start=1, stop=3, repl='X')
# 0 aX
# 1 aX
# 2 aX
# 3 aXc
# 4 aXde