在數(shù)據(jù)處理時穆桂,有時需要對數(shù)據(jù)進行分列,類似于Excel里面的分列功能,這個在pandas里面也可以實現(xiàn)腻要,下面就來詳細介紹相關(guān)的方法及注意點,前提是你已經(jīng)對pandas有一定的了解
導(dǎo)入數(shù)據(jù)
這里介紹的是從Excel導(dǎo)入數(shù)據(jù)涝登,當(dāng)然也可以從其他文件導(dǎo)入雄家、數(shù)據(jù)庫查詢后導(dǎo)入等,為了弄清楚里面的細節(jié)胀滚,本教程從Excel導(dǎo)入數(shù)據(jù)
import pandas as pd
import numpy as np
data=pd.read_excel('split.xlsx')
查看原始數(shù)據(jù)及各列數(shù)據(jù)類型趟济,可以看到指標(biāo)、選項都是object類型咽笼,其中選項列沒有缺失值
對選項列進行分列
對導(dǎo)入的原始數(shù)據(jù)進行分列顷编,這里運用的是pandas.Series.str.split方法,可以理解為把Series作為字符串進行分列操作剑刑,分列都是對字符串進行操作的
split_data=data['選項'].str.split(':',expand=True) #需要添加expand=True媳纬,使分列后的數(shù)據(jù)擴展為一個數(shù)據(jù)框
split_data
可以明顯看到分列后的數(shù)據(jù),第1施掏、5钮惠、6索引行全是缺失值,對比上面的原始數(shù)據(jù)七芭,這些都是只有一個數(shù)字素挽,難道分列方法split對只有一個數(shù)字不能分列嗎?其實則并不然狸驳,實際的原因請往下看
尋找原因
查看Excel里面的數(shù)據(jù)尋找原因预明,發(fā)現(xiàn)選項所在列,單個數(shù)字在Excel單元格是數(shù)字耙箍,其他的都是文本撰糠,因Excel里面數(shù)字一般都是在單元格里面都是靠右對齊,而文本都是靠左對齊
但是pandas導(dǎo)入數(shù)據(jù)后究西,已經(jīng)查看了選項列為object類型窗慎,難道判斷的數(shù)據(jù)類型有問題?請繼續(xù)往下看
強制轉(zhuǎn)換數(shù)據(jù)類型,再次分列
data['選項']=data['選項'].astype('str')
#data['選項']=data['選項'].astype('object') #這兩個代碼都可以轉(zhuǎn)換
split_data=data['選項'].str.split(':',expand=True)
split_data
可以看到已經(jīng)成功進行分列了遮斥,說明pandas讀取的數(shù)據(jù)峦失,判斷出來的數(shù)據(jù)類型并不一定是這一列所有數(shù)據(jù)的真實類型,而是能概括所有類型的一個較大的類型(兼容所有類型)术吗,并沒有強制轉(zhuǎn)換為同一個數(shù)據(jù)類型尉辑,比如選項列,里面有數(shù)值型较屿、字符串型隧魄,那么較大的一個類型是object,pandas及認為該列數(shù)據(jù)類型是object
合并數(shù)據(jù)
split_data.columns=['s_1','s_2','s_3','s_4']
data.join(split_data) #join比較方便隘蝎,根據(jù)索引直接對兩個表進行鏈接购啄,而merge需要設(shè)置鏈接時的字段
分列時注意事項
1.導(dǎo)入數(shù)據(jù)后一定要檢查數(shù)據(jù)類型,不要急著去處理
2.分列前檢查該列數(shù)據(jù)類型嘱么,確保該列數(shù)據(jù)類型都是字符串類型狮含,或者object類型,當(dāng)數(shù)據(jù)量很大的時候這個很容易出錯
pandas里面數(shù)據(jù)類型對照
詳情請參考這篇博文曼振,數(shù)據(jù)處理過程的數(shù)據(jù)類型