分列在我們日常工作中經(jīng)常用到,從各種系統(tǒng)中導出的什么訂單號、名稱、日期很多都是復合組成的,這些列在匹配、合并時沒有辦法使用,我們經(jīng)常需要將她們分開。
像下面的DataFrame, 城市是復合的,變電站也是復合的,我們只需要一部分,要怎么操作呢?

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

其實原理清楚的話也不是很復雜。
當然我這里還有稍微簡單的辦法,其實原理基本一樣,只是不再使用迭代,只需要df['柜臺名稱'].str.split('-')取代 x.split('-') for x in df['柜臺名稱']

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

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


注意:如果直接用某一列和split()來分列是不行的,因為Series數(shù)據(jù)類型是沒有split()的,所以需要先用.str將這一列轉換為類似字符串的格式,就能夠使用split()了。
str.split()有三個參數(shù):第一個參數(shù)就是引號里的內容:就是分列的依據(jù),可以是空格,符號,字符串等等。

在上面這個圖里,使用‘岸’作為分列依據(jù),含有岸行就分開了。
第二個參數(shù)就是前面用到的expand=True,這個參數(shù)直接將分列后的結果轉換成DataFrame。
第三個參數(shù)的n=數(shù)字就是限制分列的次數(shù)。
就是當用于分列的依據(jù)符號在有多個的話需要指定分列的次數(shù)(不指定的話就會根據(jù)符號有幾個分列幾次)。
我們先修改一下df的數(shù)據(jù):

默認全部分列:


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