pandas某一列中每一行拆分成多行的方法

2021-09-02 04:22:21 字數 4071 閱讀 9722

在處理資料過程中,常會遇到將一條資料拆分成多條,比如乙個人的位址資訊中,可能有多條位址,既有家庭位址也有工作位址,還有**資訊等等類似的情況,實際使用資料的時候又需要分開處理,這個時候就需要將這一條資料進行拆分成多條,以方便使用。

在pandas中如何對dataframe進行相關操作呢,經查閱相關資料,發現了乙個簡單的辦法,

info.drop(

['city'

], axis=1)

.join(info[

'city'].

str.split(

' ', expand=

true

).stack(

).reset_index(level=

1, drop=

true

).rename(

'city'

))

看起來非常之長,分開來看,流程如下:

具體操作如下:

預操作:生成需要使用的dataframe

# 用來生成dataframe的工具

from pydbgen import pydbgen

mydb=pydbgen.pydb(

)# 生成乙個dataframe

info = mydb.gen_dataframe(10,

['name'

,'phone'

,'city'

,'state'

])

name

phone-number

city

state

0hannah richard

810-859-7815

irwinville

louisiana

1ronald berry

591-564-0585

glen ellen

minnesota

2caitlin barron

969-840-8580

dubois

oklahoma

3felicia stephens

154-858-1233

veedersburg

alaska

4shelly dennis

343-104-9365

mattapex

virginia

5nicholas hill

992-239-1954

moneta

minnesota

6steve bradshaw

164-081-7811

ten broeck

colorado

7gail johnston

155-259-9514

wayan

virginia

8john gray

409-892-4716

darlington

pennsylvania

9katherine bautista

185-861-1677

mcnab

texas

假如現在我們要對city列進行進行拆分,按照空格拆分,轉換成多行的資料,

第一步:拆分,生成多列

info_city = info[

'city'].

str.split(

' ', expand=

true

)

結果如下:01

0irwinville

none

1glen

ellen

2dubois

none

3veedersburg

none

4mattapex

none

5moneta

none

6ten

broeck

7wayan

none

8darlington

none

9mcnab

none

可以看到已經將原始資料拆分成了2列,對於無法拆分的資料為none

第二步:行轉列

info_city = info_city.stack(

)

結果如下:00

irwinville10

glen

1ellen20

dubois30

veedersburg40

mattapex50

moneta60

ten1

broeck70

wayan80

darlington90

mcnab

其中前面兩列是索引,返回的是乙個series,沒有名字的series

第三步:重置索引,並命名(並刪除多於的索引)

info_city = info_city.reset_index(level=

1, drop=

true

)

結果如下:

0irwinville

1glen

1ellen

2dubois

3veedersburg

4mattapex

5moneta

6ten

6broeck

7wayan

8darlington

9mcnab

第四步:和原始資料合併

info_new = info.drop(

['city'

], axis=1)

.join(info_city)

結果如下:

name

phone-number

state

city

0hannah richard

810-859-7815

louisiana

irwinville

1ronald berry

591-564-0585

minnesota

glen

1ronald berry

591-564-0585

minnesota

ellen

2caitlin barron

969-840-8580

oklahoma

dubois

3felicia stephens

154-858-1233

alaska

veedersburg

4shelly dennis

343-104-9365

virginia

mattapex

5nicholas hill

992-239-1954

minnesota

moneta

6steve bradshaw

164-081-7811

colorado

ten6

steve bradshaw

164-081-7811

colorado

broeck

7gail johnston

155-259-9514

virginia

wayan

8john gray

409-892-4716

pennsylvania

darlington

9katherine bautista

185-861-1677

texas

mcnab

需要特別注意的是,需要使用原始的連線新生成的,因為新生成的是乙個series沒有join方法,也可以通過將生成的series通過to_frame方法轉換成dataframe,這樣就沒有什麼差異了

寫了這麼多,記住下面的就行了:

info.drop([『city』], axis=1).join(info[『city』].str.split(』 ', expand=true).stack().reset_index(level=1, drop=true).rename(『city』))

利用pandas刪除某一行或一列

一 準備測試資料 1 用pandas讀取excel表的數資料 coding utf 8 import pandas as pd file data.xlsx data pd.read excel file,index true 2 輸出結果 in 15 print data ab cd056 781...

jQuery獲取table下某一行某一列的值

最近需要獲取到某個table下每一行某一列的值,用jquery做了一會兒,過程如下,僅供參考 lilyokok 18hahhha tom22 hahhha2 kai34 hahhha3 這個大的div下有若干個table,現在我需要獲取每個table下某一行某一列的值 可依次彈出結果 lilyoko...

jQuery獲取table下某一行某一列的值

最近需要獲取到某個table下每一行某一列的值,用jquery做了一會兒,過程如下,僅供參考 lilyokok 18hahhha tom22 hahhha2 kai34 hahhha3 這個大的div下有若干個table,現在我需要獲取每個table下某一行某一列的值 可依次彈出結果 lilyoko...