日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python库--pandas--Series.str--字符串处理

發布時間:2023/12/20 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python库--pandas--Series.str--字符串处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 原數據
  • 字符大小寫轉換
  • 字符串拼接
  • 字符填充/插入/擴展
  • 字符串內容判斷
  • 查找
  • 統計
  • 轉碼
  • 刪減/截取
  • 分割/替換

原數據

import pandas as pd a = pd.Series(['aSd', 'asd', 'dfd fsAsf sfs']) b = pd.Series([None, 'asd', 'fgh']) indexab
0aSdNone
1asdasd
2dfd fsAsf sfsfgh

字符大小寫轉換

a.str.lower() a.str.upper() a.str.title() a.str.capitalize() a.str.swapcase() ?loweruppertitlecapitalizeswapcase
0asdASDAsdAsdAsD
1asdASDAsdAsdASD
2dfd fsasf sfsDFD FSASF SFSDfd Fsasf SfsDfd fsasf sfsDFD FSaSF SFS

字符串拼接

自身拼接

a.str.cat(sep=',')

aSd,asd,dfd fsAsf sfs

與其它series拼接

a.str.cat(a) a.str.cat(['aSd', 'asd', 'dfd fsAsf sfs']) a + a indexvalue
0aSdaSd
1asdasd
2dfd fsAsf sfsdfd fsAsf sfs
a.str.cat(a, sep=',') a.str.cat(['aSd', 'asd', 'dfd fsAsf sfs'], sep=',') a + ',' + a indexvalue
0aSd,aSd
1asd,asd
2dfd fsAsf sfs,dfd fsAsf sfs

數據含有None/NaN的情況

b.str.cat(sep=',')

asd,fgh

# 將NaN替換為指定字符串進行操作 a.str.cat(sep=',', na_rep='???')

???,asd,fgh

  • 剩下的情況除將NaN替換為指定字符之外跟上述示例一樣, 這里不再進行演示

字符填充/插入/擴展

# 向兩端填充指定字符到指定長度 a.str.center(width=10, fillchar='?') a.str.pad(width=10, side='both', fillchar='?') # 在右側填充指定字符到指定長度 a.str.ljust(width=10, fillchar='?') a.str.pad(width=10, side='right', fillchar='?') # 在右側填充指定字符到指定長度 a.str.rjust(width=10, fillchar='?') a.str.pad(width=10, side='left', fillchar='?') ?centerljustrjust
0???aSd????aSd??????????????aSd
1???asd????asd??????????????asd
2dfd fsAsf sfsdfd fsAsf sfsdfd fsAsf sfs
# 每隔指定個字符插入一個換行符 a.str.wrap(width=2) # 在字符串前面填充0到指定長度 a.str.zfill(width=10) # 將字符串擴展n倍 a.str.repeat(repeats=2) # 為每一個元素指定擴展倍數 a.str.repeat(repeats=[2, 2, 2]) ?wrapzfillrepeat
0aS\nd0000000aSdaSdaSd
1as\nd0000000asdasdasd
2df\nd \nfs\nAs\nf \nsf\nsdfd fsAsf sfsdfd fsAsf sfsdfd fsAsf sfs
  • join() 在字符間插入字符
a.str.join(sep='?') # 等同于 a.map(lambda x: '?'.join(x))
  • 因此也出現了一種特殊情況, 元素不是字符串但可以使用join方法
  • 經過不完全證明, '?'.join() 中支持的參數作為Series的元素是都可使用此方法
pd.Series([['1', '2', '3']]).join('?')

字符串內容判斷

以下方法返回由True和False組成的Series

  • contains(): 判斷指定字符串或正則表達式是否在序列或索引中
參數說明
pat字符串或正則表達式
case=True是否區分大小寫
flags=0可傳入re.IGNORECASE之類的參數
na=nan缺失值填充
regex=True是否使用正則表達式匹配
  • endswith(): 判斷是否以給定的字符串結尾
參數說明
pat字符串
na=nan缺失值填充
  • match(): 判斷是否以給定的字符串開頭(支持正則)
參數說明
pat字符串或正則表達式
case=True是否區分大小寫
flags=0可傳入re.IGNORECASE之類的參數
na=nan缺失值填充
as_indexer=None棄用
方法說明
.isalnum()字符串至少包含一個字符且所有字符都是字母(漢字)或數字則返回True
.isalpha()字符串至少包含一個字符且所有字符都是字母(漢字)則返回True
.isdigit()只包含數字(可以是: Unicode, 全角字符, bytes(b'1'), 羅馬數字)
.isspace()只包含空白符
.islower()至少包含一個小寫字符, 且不包含大寫字符
.isupper()至少包含一個大寫字符, 且不包含小寫字符
.istitle()所有單詞大寫開頭其余小寫(標題化)
.isnumeric()只包含數字字符
.isdecimal()只包含數字(Unicode字符, 全角字符)

查找

  • extract(): 使用正則表達式提取需要的內容(只返回第一次匹配到的內容)
  • extractall(): 使用正則表達式提取需要的內容(返回所有匹配到的內容
參數說明
pat正則表達式(必須含有捕獲組, 超過一個必然返回DataFrame)
若捕獲組設有name則將作為返回的列標簽
flags=0可傳入re.IGNORECASE之類的參數
expand=NoneTrue: 返回DataFrame(未來版本默認值)
False: 返回S/I/DataFrame(現在版本默認值)
extractall() 方法無此參數
a.str.extract('([A-Z]+)') a.str.extract('([A-Z]+)(s*)') ?([A-Z]+)-([A-Z]+)(s*)
0S-S
1NaN-NaN ?NaN
2A-A ?? s
a.str.extractall('(?P<field1>[sSdf]+)(?P<field2>[ds])') ??field1field2說明
?match???
00Sd第1行第1個匹配結果
10sd第2行第1個匹配結果
20dfd第3行第1個匹配結果
?1fs第3行第2個匹配結果
?2sfs第3行第3個匹配結果
  • 檢索sub在字符串中的位置, 可以指的那個開始檢索和結束檢索的位置
  • find(): 檢索不到返回-1
  • rfind(): 從右往左檢索, 檢索不到返回-1
  • index(): 檢索不到觸發異常
  • rindex(): 從右往左檢索, 檢索不到返回-1
a.str.find(sub='s') # 從第6個字符開始查找到第10個字符結束查找 a.str.find(sub='s', start=6, end=10) ?(sub='s')(sub='s', start=6, end=10)
0-1-1
11-1
257
  • findall(): 以列表形式返回正則表達式所有匹配結果
a.str.findall(pat='[sSdf]+') a.map(lambda x: re.findall('[sSdf]+', x)) ?結果
0[Sd]
1[sd]
2[dfd, fs, sf, sfs]
  • get(): 獲取指定位置的字符
a.str.get(i=1) ?結果
0S
1s
2f

統計

  • count() 統計指定字符串(支持正則)在序列字符串中出現的次數
  • len() 返回序列字符串的長度
a.str.count(pat='s', flags=0) a.str.len() ?countlen
003
113
2413

轉碼

  • encode(): 編碼str --> bytes
  • decode(): 解碼bytes --> str
參數說明
encoding編碼方式
error='static'static: 編碼/解碼失敗拋出異常

ignore: 編碼/解碼失敗自動忽略非法字符

replace: 編碼/解碼失敗則使用 ? 替代非法字符

xmlcharrefreplace: 則引用XML的字符.

c = pd.Series(['中文', '\ud83easd']) c.str.encode('utf8', 'ignore') c.str.encode('utf8', 'replace') c.str.encode('utf8', 'xmlcharrefreplace') ?ignorereplacexmlcharrefreplacebackslashreplace
1b'asd'b'?asd'b'&#55358;asd'b'\ud83easd'
# 中國: b'\xe4\xb8\xad\xe6\x96\x87' d = pd.Series([b'\xe4\xb8\xad\xe6\x96']) d.str.decode('utf8', 'ignore') ?ignorereplacexmlcharrefreplacebackslashreplace
1中�NaN中\xe6\x96
  • normalize(): 返回字符串的Unicode標準格式

刪減/截取

  • strip(to_strip=None): 刪除兩側指定字符, 默認刪除空白符
  • lstrip(to_strip=None): 刪除左側指定字符, 默認刪除空白符
  • rstrip(to_strip=None): 刪除右側指定字符, 默認刪除空白符
  • slice() 截取子字符串
參數說明
start=None開始位置
stop=None結束位置
step=None步長

分割/替換

  • split() 使用指定字符分割字符串, 支持正則
  • rsplit() 從右側開始分割
參數說明
pat=None分隔符, 默認空白符
n=-1分割次數, 默認全部
expand=FalseTrue: 返回DataFrame/MultiINdex
False: 返回Series/Index
  • get_dummies(): 對字符串分割, 并返回每個分割結果出現的次數
>>> pd.Series(['a|b', 'a', 'a|c']).str.get_dummies()a b c 0 1 1 0 1 1 0 0 2 1 0 1 >>> pd.Series(['a|b', np.nan, 'a|c']).str.get_dummies()a b c 0 1 1 0 1 0 0 0 2 1 0 1
  • partition(pat='', expand=True): 第一次出現pat時將字符串分割為三個部分: pat前面的部分, pat本身, pat后面的部分
  • rpartition(): 從右往左檢測pat字符串

更新字符串

  • replace(): 更新字符串
參數說明
pat字符串或編譯的正則表達式
replstr: 將匹配到的字符串替換為此字符串
fun: 傳給fun的是對象相當于re.search(pat, string)的返回值
n=-1替換的次數, 默認全部
case=None是否區分大小寫, 如果pat為字符串則默認為True, 若為編譯的正則表達式則不能設置
flags=0可傳入re.IGNORECASE之類的參數, 但若pat為編譯的正則表達式則不能設置
  • slice_replace(): 將選中的部分替換為指定字符串
參數說明
start=None開始位置
stop=None結束位置
repl=None要替換為的字符串
  • translate(): 字符替換
  • dict: {ord('a'): 'x'} 或 {ord('a'): ord('x')} key必須是ascii碼, value可以是字符串或ASCII碼
  • str.maketrans('a','x') 等同于 {97: 120}

轉載于:https://www.cnblogs.com/P--K/p/11148250.html

總結

以上是生活随笔為你收集整理的python库--pandas--Series.str--字符串处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。