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函數
具體使用方法以及作業如下
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) #這裏和上面一定程度是等價的
上面合併時候b相對a的’b’和’a’索引缺失所以用a來填充
重塑和軸向旋轉
重塑層次化索引
- stack將數據的列”旋轉”爲行
- unstack將數據的行”旋轉”爲列
對於一個層次化索引的Series可以用unstack(可能引入缺失數據)重排爲DataFrame
- stack默認會濾除缺失數據,所以這兩個是可逆的
- unstack旋轉的時候旋轉軸等級最低