溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

發(fā)布時(shí)間:2021-11-01 13:32:50 來(lái)源:億速云 閱讀:150 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容介紹了“pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

1.英文字母大小寫轉(zhuǎn)換及填充

s = pd.Series(['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe'])
  • 大寫轉(zhuǎn)小寫: s.str.lower()

  • 小寫轉(zhuǎn)大寫:s.str.upper()

  • 轉(zhuǎn)為新聞標(biāo)題形式:s.str.title()

  • 首字母大寫,其余小寫:s.str.capitalize()

  • 將原來(lái)的大寫和小寫,分別轉(zhuǎn)為小寫和大寫,即大小寫互換:s.str.swapcase()

  • 將文字內(nèi)容用某種字符填充到固定長(zhǎng)度,會(huì)從兩邊進(jìn)行填充:s.str.center(4,'*')

  • 將文字內(nèi)容用某種字符填充到固定長(zhǎng)度,可以設(shè)置填充方向(默認(rèn)為left,可以設(shè)置為left,right,both):s.str.pad(width=10, side=‘right', fillchar='-')

  • 將文字內(nèi)容用某種字符填充到固定長(zhǎng)度,會(huì)從文字的右方進(jìn)行填充,即原來(lái)的字符串在左邊:s.str.ljust(4,'-')

  • 將文字內(nèi)容用某種字符填充到固定長(zhǎng)度,會(huì)從文字的左方進(jìn)行填充,即原來(lái)的字符串在右邊:s.str.rjust(4,'-')

  • 將文字內(nèi)容用某種字符按照指定的方向(left,right,both)填充到固定長(zhǎng)度: s.str.pad(3,side=‘left',fillchar='*')

  • 在字符串前添加0到指定長(zhǎng)度:

  • s = pd.Series(['-1', ‘1', ‘1000', 10, np.nan])

  • s.str.zfill(3)

2.字符串合并與拆分

2.1 多列字符串合并

注意:多列字符串在合并時(shí),推薦使用cat函數(shù),該函數(shù)是按照索引進(jìn)行合并的。

s=pd.DataFrame({'col1':['a', 'b', np.nan, 'd'],'col2':['A', 'B', 'C', 'D']})
# 1.有一個(gè)缺失值的行不進(jìn)行合并
s['col1'].str.cat([s['col2']])
# 2.用固定字符(*)替換缺失值,并進(jìn)行合并
s['col1'].str.cat([s['col2']],na_rep='*')
# 3.用固定字符(*)替換缺失值,并用分隔符(,)進(jìn)行合并
s['col1'].str.cat([s['col2']],na_rep='*',sep=',')
# 4.索引不一致的合并
#創(chuàng)建series
s = pd.Series(['a', 'b', np.nan, 'd'])
t = pd.Series(['d', 'a', 'e', 'c'], index=[3, 0, 4, 2])
#合并
s.str.cat(t, join='left', na_rep='-')
s.str.cat(t, join='right', na_rep='-')
s.str.cat(t, join='outer', na_rep='-')
s.str.cat(t, join='inner', na_rep='-')

2.2 一列 列表形式的文本合并為一列

s = pd.Series([['lion', 'elephant', 'zebra'], [1.1, 2.2, 3.3], [
              'cat', np.nan, 'dog'], ['cow', 4.5, 'goat'], ['duck', ['swan', 'fish'], 'guppy']])
#以下劃線進(jìn)行拼接
s.str.join('_')

使用前:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

使用后:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

2.3 一列字符串與自身合并成為一列

s = pd.Series(['a', 'b', 'c'])
#指定數(shù)字
s.str.repeat(repeats=2)
#指定列表
s.str.repeat(repeats=[1, 2, 3])

使用該函數(shù)后,效果圖分別如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些
pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

2.4 一列字符串拆分為多列

2.4.1 partition函數(shù)

partition函數(shù),會(huì)將某列字符串拆分為3列,其中2列為值,1列為分隔符。
有兩個(gè)參數(shù)進(jìn)行設(shè)置,分別為:sep(分隔符,默認(rèn)為空格),expand(是否生成dataframe,默認(rèn)為True)

s = pd.Series(['Linda van der Berg', 'George Pitt-Rivers'])
#默認(rèn)寫法,以空格分割,會(huì)以第一個(gè)分隔符進(jìn)行拆分
s.str.partition()
#另一寫法,會(huì)以最后一個(gè)分隔符進(jìn)行拆分
s.str.rpartition()
#以固定符號(hào)作為分隔符
s.str.partition('-', expand=False)
#拆分索引
idx = pd.Index(['X 123', 'Y 999'])
idx.str.partition()
2.4.2 split函數(shù)

split函數(shù)會(huì)按照分隔符拆分為多個(gè)值。
參數(shù):
pat(分隔符,默認(rèn)為空格);
n(限制分隔的輸出,即查找?guī)讉€(gè)分隔符,默認(rèn)-1,表示全部);
expend(是否生成dataframe,默認(rèn)為False)。

s = pd.Series(["this is a regular sentence","https://docs.python.org/3/tutorial/index.html",np.nan])
#1.默認(rèn)按照空格進(jìn)行拆分
s.str.split()
#2.按照空格進(jìn)行拆分,并限制2個(gè)分隔符的輸出
s.str.split(n=2)
#3.以指定符號(hào)拆分,并生成新的dataframe
s.str.split(pat = "/",expend=True)
#4.使用正則表達(dá)式來(lái)進(jìn)行拆分,并生成新的dataframe
s = pd.Series(["1+1=2"])
s.str.split(r"\+|=", expand=True)
2.4.3 rsplit函數(shù)

如果不設(shè)置n的值,rsplit和split效果是相同的。區(qū)別是,split是從開(kāi)始進(jìn)行限制,rsplit是從末尾進(jìn)行限制。

s = pd.Series(["this is a regular sentence","https://docs.python.org/3/tutorial/index.html",np.nan])
#區(qū)別于split
s.str.rsplit(n=2)

3.字符串統(tǒng)計(jì)

 3.1 統(tǒng)計(jì)某列字符串中包含某個(gè)字符串的個(gè)數(shù)

s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')])
s.str.len()

3.2 統(tǒng)計(jì)字符串長(zhǎng)度

s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')])
s.str.len()

效果圖如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

4.字符串內(nèi)容查找(包含正則)

 4.1 extract

可通過(guò)正則表達(dá)式來(lái)提取指定內(nèi)容,小括號(hào)內(nèi)的會(huì)生成一列

s = pd.Series(['a1', 'b2', 'c3'])
#按照小括號(hào)內(nèi)的進(jìn)行提取,生成兩列
s.str.extract(r'([ab])(\d)')
#加上問(wèn)號(hào)后,如果有一個(gè)匹配不上,還可以繼續(xù)匹配
s.str.extract(r'([ab])?(\d)')
#可以對(duì)生成的新列進(jìn)行重命名
s.str.extract(r'(?P<letter>[ab])(?P<digit>\d)')
#生成1列
s.str.extract(r'[ab](\d)', expand=True)

4.2 extractall

區(qū)別于extract,該函數(shù)可以提取所有符合條件的元素

s = pd.Series(["a1a2", "b1", "c1"], index=["A", "B", "C"])
#提取所有符合條件的數(shù)字,結(jié)果為多重索引1列
s.str.extractall(r"[ab](\d)")
#提取符合條件的數(shù)字,并重命名,結(jié)果為多重索引1列
s.str.extractall(r"[ab](?P<digit>\d)")
#提取符合條件的a、b和數(shù)字,結(jié)果為多重索引多列
s.str.extractall(r"(?P<letter>[ab])(?P<digit>\d)")
#提取符合條件的a、b和數(shù)字,添加問(wèn)號(hào)后,一個(gè)匹配不上可以繼續(xù)向后匹配,結(jié)果為多重索引多列
s.str.extractall(r"(?P<letter>[ab])?(?P<digit>\d)")

4.3 find

查詢固定字符串在目標(biāo)字符串中的最小索引。
若需要查詢的字符串未出現(xiàn)在目標(biāo)字符串中,則顯示為-1

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.find('p')

顯示結(jié)果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

4.4 rfind

查詢固定字符串在目標(biāo)字符串中的最大索引。
若需要查詢的字符串未出現(xiàn)在目標(biāo)字符串中,則顯示為-1。

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.rfind('p',start=1)

查詢結(jié)果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

4.5 findall

查找系列/索引中所有出現(xiàn)的模式或正則表達(dá)式

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.findall(r'[ac]')

顯示結(jié)果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

4.6 get

從列表、元組或字符串中的每個(gè)元素中提取元素的系列/索引。

s = pd.Series(["String",
               (1, 2, 3),
               ["a", "b", "c"],
               123,
               -456,
               {1: "Hello", "2": "World"}])
s.str.get(1)

效果如下圖:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

4.7 match

確定每個(gè)字符串是否與參數(shù)中的正則表達(dá)式匹配。

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.match('^[ap].*t')

匹配效果圖如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.字符串邏輯判斷

5.1 contains函數(shù)

測(cè)試模式或正則表達(dá)式是否包含在系列或索引的字符串中。
參數(shù):
pat,字符串或正則表達(dá)式;
case,是否區(qū)分大小寫,默認(rèn)為True,即區(qū)分大小寫;
flags,是否傳遞到re模塊,默認(rèn)為0;
na,對(duì)缺失值的處理方法,默認(rèn)為nan;
regex,是否將pat參數(shù)當(dāng)作正則表達(dá)式來(lái)處理,默認(rèn)為True。

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.contains('ap',case=True,na=False,regex=False)

效果圖如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.2 endswith函數(shù)

測(cè)試每個(gè)字符串元素的結(jié)尾是否與字符串匹配。

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.endswith('e')

匹配結(jié)果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

處理nan值

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.endswith('e',na=False)

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.3 startswith函數(shù)

測(cè)試每個(gè)字符串元素的開(kāi)頭是否與字符串匹配。

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.startswith('a',na=False)

匹配如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.4 isalnum函數(shù)

檢查每個(gè)字符串中的所有字符是否都是字母數(shù)字。

s1 = pd.Series(['one', 'one1', '1', ''])
s1.str.isalnum()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.5 isalpha函數(shù)

檢查每個(gè)字符串中的所有字符是否都是字母。

s1 = pd.Series(['one', 'one1', '1', ''])
s1.str.isalpha()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.6 isdecimal函數(shù)

檢查每個(gè)字符串中的所有字符是否都是十進(jìn)制的。

s1 = pd.Series(['one', 'one1', '1',''])
s1.str.isdecimal()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.7 isdigit函數(shù)

檢查每個(gè)字符串中的所有字符是否都是數(shù)字。

s1 = pd.Series(['one', 'one1', '1',''])
s1.str.isdigit()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.8 islower函數(shù)

檢查每個(gè)字符串中的所有字符是否都是小寫。

s1 = pd.Series(['one', 'one1', '1',''])
s1.str.islower()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.9 isnumeric函數(shù)

檢查每個(gè)字符串中的所有字符是否都是數(shù)字。

s1 = pd.Series(['one', 'one1', '1','','3.6'])
s1.str.isnumeric()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.10 isspace函數(shù)

檢查每個(gè)字符串中的所有字符是否都是空格。

s1 = pd.Series([' one', '\t\r\n','1', '',' '])
s1.str.isspace()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.11 istitle函數(shù)

檢查每個(gè)字符串中的所有字符是否都是標(biāo)題形式的大小寫。

s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.istitle()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.12 isupper函數(shù)

檢查每個(gè)字符串中的所有字符是否都是大寫。

s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.isupper()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

5.13 get_dummies函數(shù)

按 sep 拆分系列中的每個(gè)字符串并返回一個(gè) 虛擬/指標(biāo)變量的dataframe。

s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.get_dummies()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

該函數(shù)還可以進(jìn)行此類匹配,注意輸入的形式

s1=pd.Series(['a|b', np.nan, 'a|c'])
s1.str.get_dummies()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

6.其他

6.1 strip

刪除前導(dǎo)和尾隨字符。

s1 = pd.Series(['1. Ant.  ', '2. Bee!\n', '3. Cat?\t', np.nan])
s1.str.strip()

效果如下:

pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些

6.2 lstrip

刪除系列/索引中的前導(dǎo)字符。

6.3 rstrip

刪除系列/索引中的尾隨字符。

“pandas中對(duì)文本類型數(shù)據(jù)的處理的方法有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI