Pandas 數據整合

Pandas 數據整合

標籤(空格分隔): python pandas


合併數數據集

pandas.merge可以根據一個或者多個鍵將不同DataFrame合併起來
pandas.contact 可以沿着一個軸將多個對象疊到一起
combine_first可以將數據編接到一起,用一個對象中的值填充另一個值

數據庫風格DataFrame合併

pd.merge(f1, f2)            #默認將重疊列名當做鍵
pd.merge(f1, f2, on='key')  #顯示指定對'key'鍵進行連接
pd.merge(f1, f2, left_on='lkey', right_on='rkey') #對不同列名連接
pd.merge(f1, f2, how='outer')   #默認情況下merge做inner,也就是交集
                                #其他方式還可以是left,right,outer
pd.merge(f1, f2, on='key', how='left') #多對多行產生笛卡爾積
                                #連接方式隻影響出現在結果中的鍵

#注意,在進行列列連接的時候,DataFrame的索引會丟棄 on可以是多個鍵

合併運算重複列名
如f1和f2都有鍵key1,key2,現在想要進行key1進行合併,那麼key2列名重複怎麼辦???
可以指定附加到左右兩個DataFrame重複列名上面

pd.merge(f1, f2, on='key1', suffixes=('_left', '_right'))
#合併後的列名有:key1,key2_left,key2_right

詳細的合併參數
合併參數

索引上的合併

有時候DataFrame的連接鍵位於索引中,可以傳入left_index=True或者right_index=True以說明索引應該被用作連接鍵

索引合併

join實例方法
join可以更爲方便的實現按索引合併,還可以合併多個帶有相同或者相似索引的DataFrame對象,而不管他們之間有沒有重疊的列

pd.merge(f1, f2, how='outer', left_index=True, right_index=True) #合併兩個索引
f1.join(f2, how='outer')    #和上面等價

DataFrame的join是在連接鍵上做左連接,他還支持參數f2的索引和調用者某個列之間連接
f1.join(f2, on='key')

對於簡單的索引合併,可以用join傳遞多個DataFrame

f1.join([f2, f3]) #把他們按照f1索引左連接
f1.join([f2, f3], how='outer') #把他們按照f索引全連接

軸向連接

concatenation函數
NumPy有一個用於合併原始NumPy數組的concatenation函數
具體使用方法以及作業如下
concatenation函數

contact函數
下面假設沒有重疊索引
contact函數
默認情況下面contact是在axis=0上工作的,最終產生一個新的Series,如果傳入axis=1那麼就會產生一個新的DataFrame

  • 可以通過設置join=’inner’來得到他們的交集
  • 可以通過join_axes=[[‘a’, ‘b’, ‘c’]]來指定要在其他周使用的索引

如果參與連接的片段在結果中區分不開,可以創建一個層次化索引,通過keys參數達到這個目的,下面還可以調用result.unstack()來去層次化

如果沿着axis=1對Series進行合併,那麼keys就會變成DataFrame的列頭.對DataFrame合併同理

不保留連接軸上的索引,產生新的索引ignore_index=True

contact函數的參數

合併重疊數據

combine_first
這裏用np.where來解釋combine_first

np.where(a.isnull(), b, a)
a.combine_first(b)  #這裏和上面一定程度是等價的

combine_first解釋
上面合併時候b相對a的’b’和’a’索引缺失所以用a來填充

重塑和軸向旋轉

重塑層次化索引

  • stack將數據的列”旋轉”爲行
  • unstack將數據的行”旋轉”爲列

對於一個層次化索引的Series可以用unstack(可能引入缺失數據)重排爲DataFrame

  • stack默認會濾除缺失數據,所以這兩個是可逆的
  • unstack旋轉的時候旋轉軸等級最低
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章