資料處理過程中,經常需要將二維資料轉換為一維,或者將一維轉換為二維報表的形式,在excel中需要借助資料透視表進行一維轉二維,在pandas中有許多重塑(reshape)或者軸向旋轉(pivot)運算。
重塑層次化索引
層次索引化為dataframe資料的重排任務提供了一種具有良好一致性的方式:stack :將資料的列旋轉為行;
unstack:將資料的行旋轉為列
data = dataframe(np.arange(6).reshape((2,3)),
index =pd.index(['ohio','colorado'],name='state'),
columns = pd.index(['one','two','three'],name='unmber'))
data
result =data.stack()
result
對於乙個層次化索引的series,可以通過unstack重排為乙個dataframe,unstack操作的是最內層,傳入分層級別的編號或者名稱即可對其他級別進行unstack。
stack會預設將缺失值過濾,如果要保留缺失值需要傳入dropna = false;
時間序列中將長格式旋轉為寬格式
在mysql關係型資料庫中,資料的儲存格式(ldate的前3行如下)
date item value
0 1959-03-31 00:00:00 realgdp 276.2
1 1959-03-31 00:00:00 infl 214.224
2 1959-03-31 00:00:00 unemp 4.232
如果想將以上資料轉換為dataframe,實現不同的item值分別形式一列,date中的值則用作索引,則需要使用dataframe的pivot的方法。
對例項化資料框.pivot相當於excel中的透視表功能,指定行的索引,指定列的字段,資料填充**。
ldate.pivot(『date』,『item』,『value』)
前兩個引數值分別用做行和列索引的列名,最後乙個引數值則是用於填充dataframe的資料列的列名,和excel中不同的是pivot方法中如果忽略最後乙個引數值,則當有多個標量時,就會得到乙個帶有層次化的列:
如上例中有兩個需要參與重塑的資料列
ldate['value2'] = np.random.randn(len(ldate)) #增加乙個資料列value2
當忽略最後乙個引數時,預設兩個資料列進行重排,那麼兩個資料列就會以乙個層次化的列dataframe。
小結:在資料清理規整過程中,需要對資料進行行列轉換,按軸重排則需使用到stack/unsack/pivot的方法,使得資料以想要的方式實現重排。
Python之資料規整化 清理 轉換 合併 重塑
1.合併資料集pandas.merge可根據乙個或者多個不同dataframe中的行連線起來。pandas.concat可以沿著一條軸將多個物件堆疊到一起。例項方法combine first可以將重複資料編接在一起,用乙個物件中的值填充另乙個物件中的缺失值。2.資料風格的dataframe合併操作2...
利用Python資料分析 資料規整化(四
移除重複項 data dataframe data data.duplicated 返回乙個布林型別的series來表示各行是否為重複行 duplicated adj.複製出的,複寫書的 data.drop duplicates 丟棄掉重複的行 data v1 range 7 data.duplic...
Oracle資料庫之層次化查詢
基本查詢 select id,c mmcode,c mmroomname,c parentid from s mmroom 層次化查詢 select id,c mmcode,c mmroomname,c parentid from s mmroom start with c parentid 0 c...