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