Pandas實(shí)現(xiàn)一列數(shù)據(jù)分隔為兩列
分割成一個包含兩個元素列表的列
對于一個已知分隔符的簡單分割(例如,用破折號分割或用空格分割).str.split() 方法就足夠了 。 它在字符串的列(系列)上運(yùn)行,并返回列表(系列)。
>>> import pandas as pd
>>> df = pd.DataFrame({'AB': ['A1-B1', 'A2-B2']})
>>> df
AB
0 A1-B1
1 A2-B2
>>> df['AB_split'] = df['AB'].str.split('-')
>>> df
AB AB_split
0 A1-B1 [A1, B1]
1 A2-B2 [A2, B2]
分割成兩列,每列包含列表的相應(yīng)元素
下面來看下如何從:分割成一個包含兩個元素列表的列至分割成兩列,每列包含列表的相應(yīng)元素。
>>> df['AB'].str[0] 0 A 1 A Name: AB, dtype: object >>> df['AB'].str[1] 0 1 1 2 Name: AB, dtype: object
因此可以得到
>>> df['AB'].str.split('-', 1).str[0]
0 A1
1 A2
Name: AB, dtype: object
>>> df['AB'].str.split('-', 1).str[1]
0 B1
1 B2
Name: AB, dtype: object
可以通過如下代碼將pandas的一列分成兩列:
>>> df['A'], df['B'] = df['AB'].str.split('-', 1).str
>>> df
AB AB_split A B
0 A1-B1 [A1, B1] A1 B1
1 A2-B2 [A2, B2] A2 B2
補(bǔ)充知識:pandas某一列中每一行拆分成多行的方法
在處理數(shù)據(jù)過程中,常會遇到將一條數(shù)據(jù)拆分成多條,比如一個人的地址信息中,可能有多條地址,既有家庭地址也有工作地址,還有電話信息等等類似的情況,實(shí)際使用數(shù)據(jù)的時候又需要分開處理,這個時候就需要將這一條數(shù)據(jù)進(jìn)行拆分成多條,以方便使用。
在pandas中如何對DataFrame進(jìn)行相關(guān)操作呢,經(jīng)查閱相關(guān)資料,發(fā)現(xiàn)了一個簡單的辦法,
info.drop(['city'], axis=1).join(info['city'].str.split(' ', expand=True).stack().reset_index(level=1, drop=True).rename('city'))
看起來非常之長,分開來看,流程如下:
將需要拆分的數(shù)據(jù)使用split拆分工具拆分,并使用expand功能拆分成多列
將拆分后的多列數(shù)據(jù)進(jìn)行列轉(zhuǎn)行操作(stack),合并成一列
將生成的復(fù)合索引重新進(jìn)行reset保留原始的索引,并命名
將上面處理后的DataFrame和原始DataFrame進(jìn)行join操作,默認(rèn)使用的是索引進(jìn)行連接
具體操作如下:
預(yù)操作:生成需要使用的DataFrame
# 用來生成DataFrame的工具 from pydbgen import pydbgen myDB=pydbgen.pydb() # 生成一個DataFrame info = myDB.gen_dataframe(10,['name','phone','city','state'])
結(jié)果如下:
| name | phone-number | city | state | |
|---|---|---|---|---|
| 0 | Hannah Richard | 810-859-7815 | Irwinville | Louisiana |
| 1 | Ronald Berry | 591-564-0585 | Glen Ellen | Minnesota |
| 2 | Caitlin Barron | 969-840-8580 | Dubois | Oklahoma |
| 3 | Felicia Stephens | 154-858-1233 | Veedersburg | Alaska |
| 4 | Shelly Dennis | 343-104-9365 | Mattapex | Virginia |
| 5 | Nicholas Hill | 992-239-1954 | Moneta | Minnesota |
| 6 | Steve Bradshaw | 164-081-7811 | Ten Broeck | Colorado |
| 7 | Gail Johnston | 155-259-9514 | Wayan | Virginia |
| 8 | John Gray | 409-892-4716 | Darlington | Pennsylvania |
| 9 | Katherine Bautista | 185-861-1677 | McNab | Texas |
假如現(xiàn)在我們要對city列進(jìn)行進(jìn)行拆分,按照空格拆分,轉(zhuǎn)換成多行的數(shù)據(jù),
第一步:拆分,生成多列
info_city = info['city'].str.split(' ', expand=True)
結(jié)果如下:
| 0 | 1 | |
|---|---|---|
| 0 | Irwinville | None |
| 1 | Glen | Ellen |
| 2 | Dubois | None |
| 3 | Veedersburg | None |
| 4 | Mattapex | None |
| 5 | Moneta | None |
| 6 | Ten | Broeck |
| 7 | Wayan | None |
| 8 | Darlington | None |
| 9 | McNab | None |
可以看到已經(jīng)將原始數(shù)據(jù)拆分成了2列,對于無法拆分的數(shù)據(jù)為None
第二步:行轉(zhuǎn)列
info_city = info_city.stack()
結(jié)果如下:
| 0 | 0 | Irwinville |
| 1 | 0 | Glen |
| 1 | Ellen | |
| 2 | 0 | Dubois |
| 3 | 0 | Veedersburg |
| 4 | 0 | Mattapex |
| 5 | 0 | Moneta |
| 6 | 0 | Ten |
| 1 | Broeck | |
| 7 | 0 | Wayan |
| 8 | 0 | Darlington |
| 9 | 0 | McNab |
其中前面兩列是索引,返回的是一個series,沒有名字的series
第三步:重置索引,并命名(并刪除多于的索引)
info_city = info_city.reset_index(level=1, drop=True)
結(jié)果如下:
| 0 | Irwinville |
| 1 | Glen |
| 1 | Ellen |
| 2 | Dubois |
| 3 | Veedersburg |
| 4 | Mattapex |
| 5 | Moneta |
| 6 | Ten |
| 6 | Broeck |
| 7 | Wayan |
| 8 | Darlington |
| 9 | McNab |
第四步:和原始數(shù)據(jù)合并
info_new = info.drop(['city'], axis=1).join(info_city)
結(jié)果如下:
| name | phone-number | state | city | |
|---|---|---|---|---|
| 0 | Hannah Richard | 810-859-7815 | Louisiana | Irwinville |
| 1 | Ronald Berry | 591-564-0585 | Minnesota | Glen |
| 1 | Ronald Berry | 591-564-0585 | Minnesota | Ellen |
| 2 | Caitlin Barron | 969-840-8580 | Oklahoma | Dubois |
| 3 | Felicia Stephens | 154-858-1233 | Alaska | Veedersburg |
| 4 | Shelly Dennis | 343-104-9365 | Virginia | Mattapex |
| 5 | Nicholas Hill | 992-239-1954 | Minnesota | Moneta |
| 6 | Steve Bradshaw | 164-081-7811 | Colorado | Ten |
| 6 | Steve Bradshaw | 164-081-7811 | Colorado | Broeck |
| 7 | Gail Johnston | 155-259-9514 | Virginia | Wayan |
| 8 | John Gray | 409-892-4716 | Pennsylvania | Darlington |
| 9 | Katherine Bautista | 185-861-1677 | Texas | McNab |
需要特別注意的是,需要使用原始的連接新生成的,因?yàn)樾律傻氖且粋€series沒有join方法,也可以通過將生成的series通過to_frame方法轉(zhuǎn)換成DataFrame,這樣就沒有什么差異了
寫了這么多,記住下面的就行了:
info.drop([‘city'], axis=1).join(info[‘city'].str.split(' ', expand=True).stack().reset_index(level=1, drop=True).rename(‘city'))
如果原數(shù)據(jù)中已經(jīng)是list了,可以將info[‘city'].str.split(' ', expand=True)這部分替換成info[‘city'].apply(lambda x: pd.Series(x)),就可以達(dá)到相同的目的。
以上這篇Pandas實(shí)現(xiàn)一列數(shù)據(jù)分隔為兩列就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- pandas之分組統(tǒng)計列聯(lián)表pd.crosstab()問題
- Python?Pandas:DataFrame一列切分成多列、分隔符切分選字段方式
- Python pandas入門系列之眾數(shù)和分位數(shù)
- pandas 實(shí)現(xiàn)某一列分組,其他列合并成list
- pandas將list數(shù)據(jù)拆分成行或列的實(shí)現(xiàn)
- pandas 使用均值填充缺失值列的小技巧分享
- Python學(xué)習(xí)筆記之pandas索引列、過濾、分組、求和功能示例
- pandas數(shù)據(jù)分列實(shí)現(xiàn)分割符號&固定寬度
相關(guān)文章
PyTorch的深度學(xué)習(xí)入門教程之構(gòu)建神經(jīng)網(wǎng)絡(luò)
這篇文章主要介紹了PyTorch的深度學(xué)習(xí)入門教程之構(gòu)建神經(jīng)網(wǎng)絡(luò),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式
今天小編就為大家分享一篇dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
python實(shí)現(xiàn)音樂播放和下載小程序功能
這篇文章主要介紹了python實(shí)現(xiàn)音樂播放和下載小程序功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
一款強(qiáng)大的端到端測試工具Playwright介紹
這篇文章主要為大家介紹了一款強(qiáng)大的端到端測試工具Playwright介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
python的dataframe轉(zhuǎn)換為多維矩陣的方法
下面小編就為大家分享一篇python的dataframe轉(zhuǎn)換為多維矩陣的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Tensorflow分類器項目自定義數(shù)據(jù)讀入的實(shí)現(xiàn)
這篇文章主要介紹了Tensorflow分類器項目自定義數(shù)據(jù)讀入的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
Python要求O(n)復(fù)雜度求無序列表中第K的大元素實(shí)例
這篇文章主要介紹了Python要求O(n)復(fù)雜度求無序列表中第K的大元素實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python快速實(shí)現(xiàn)一個線程池的示例代碼
當(dāng)有多個?IO?密集型的任務(wù)要被處理時,我們自然而然會想到多線程。而線程池的實(shí)現(xiàn)也很簡單,因?yàn)?Python?提供了一個標(biāo)準(zhǔn)庫?concurrent.futures,已經(jīng)內(nèi)置了對線程池的支持。所以本篇文章,我們就來詳細(xì)介紹一下該模塊的用法2022-07-07

