5、pandas的字符串的分割之str.split()

分列在我們?nèi)粘9ぷ髦薪?jīng)常用到,從各種系統(tǒng)中導(dǎo)出的什么訂單號(hào)、名稱、日期很多都是復(fù)合組成的,這些列在匹配、合并時(shí)沒有辦法使用,我們經(jīng)常需要將她們分開。

像下面的DataFrame, 城市是復(fù)合的,變電站也是復(fù)合的,我們只需要一部分,要怎么操作呢?

DataFrame數(shù)據(jù)

網(wǎng)上搜索了一下,以前的做法是將要分的那列迭代并用split()分開,然后將分開后的數(shù)據(jù)新建一個(gè)DataFrame,然后再與原數(shù)據(jù)合并。比較復(fù)雜,大概的代碼如下:

使用split和merge函數(shù)

其實(shí)原理清楚的話也不是很復(fù)雜。

當(dāng)然我這里還有稍微簡單的辦法,其實(shí)原理基本一樣,只是不再使用迭代,只需要df['柜臺(tái)名稱'].str.split('-')取代 x.split('-') for x in df['柜臺(tái)名稱']

使用str.split分列

我們看到出來的結(jié)果已經(jīng)有索引和列名,明顯已經(jīng)是一個(gè)DataFrame了,這就是參數(shù)expand=True的作用。

指定expand=True生成DataFrame

在這里新的DataFrame和原數(shù)據(jù)df都是使用的默認(rèn)索引,索引是一致的,可以以索引為鍵,使用merge()合并。如果索引不同的話,就需要重新設(shè)置索引了。

使用merge函數(shù)連接
使用merge函數(shù)連接(簡潔版)

注意:如果直接用某一列和split()來分列是不行的,因?yàn)镾eries數(shù)據(jù)類型是沒有split()的,所以需要先用.str將這一列轉(zhuǎn)換為類似字符串的格式,就能夠使用split()了。

str.split()有三個(gè)參數(shù):第一個(gè)參數(shù)就是引號(hào)里的內(nèi)容:就是分列的依據(jù),可以是空格,符號(hào),字符串等等。

按字符串分列

在上面這個(gè)圖里,使用‘岸’作為分列依據(jù),含有岸行就分開了。

第二個(gè)參數(shù)就是前面用到的expand=True,這個(gè)參數(shù)直接將分列后的結(jié)果轉(zhuǎn)換成DataFrame。

第三個(gè)參數(shù)n=數(shù)字就是限制分列的次數(shù)。

就是當(dāng)用于分列的依據(jù)符號(hào)在有多個(gè)的話需要指定分列的次數(shù)(不指定的話就會(huì)根據(jù)符號(hào)有幾個(gè)分列幾次)。

我們先修改一下df的數(shù)據(jù):

DataFrame數(shù)據(jù)

默認(rèn)全部分列:

默認(rèn)不選n的參數(shù)
n=1和n=2

如果我想從最右邊的開始找分列的依據(jù),可以使用rsplit(),rsplit和split()的用法類似,一個(gè)從右邊開始,一個(gè)從左邊開始。

使用rsplit函數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容