Pandas寶藏函數(shù)-concat()
在數(shù)據(jù)處理過程中,經(jīng)常會(huì)遇到多個(gè)表進(jìn)行拼接合并的需求,在Pandas中有多個(gè)拼接合并的方法,每種方法都有自己擅長的拼接方式,本文對pd.concat()進(jìn)行詳細(xì)講解,希望對你有幫助。pd.concat()函數(shù)可以沿著指定的軸將多個(gè)dataframe或者series拼接到一起,這一點(diǎn)和另一個(gè)常用的pd.merge()函數(shù)不同,pd.merge()解決數(shù)據(jù)庫樣式的左右拼接,不能解決上下拼接。
一、基本語法
pd.concat(objs,axis=0,join='outer',??? ?ignore_index=False,? ?keys=None,??????? ?levels=None,?????? ??names=None,??????? ??verify_integrity=False,???????? copy=True)
二、參數(shù)含義
objs:Series,DataFrame或Panel對象的序列或映射,如果傳遞了dict,則排序的鍵將用作鍵參數(shù) axis:{0,1,...},默認(rèn)為0,也就是縱向上進(jìn)行合并。沿著連接的軸。 join:{'inner','outer'},默認(rèn)為“outer”。如何處理其他軸上的索引。outer為聯(lián)合和inner為交集。 ignore_index:boolean,default False。如果為True,請不要使用并置軸上的索引值。結(jié)果軸將被標(biāo)記為0,...,n-1。如果要連接其中并置軸沒有有意義的索引信息的對象,這將非常有用。注意,其他軸上的索引值在連接中仍然受到尊重。 keys:序列,默認(rèn)值無。使用傳遞的鍵作為最外層構(gòu)建層次索引。如果為多索引,應(yīng)該使用元組。 levels:序列列表,默認(rèn)值無。用于構(gòu)建MultiIndex的特定級別(唯一值)。否則,它們將從鍵推斷。 names:list,default無。結(jié)果層次索引中的級別的名稱。 verify_integrity:boolean,default False。檢查新連接的軸是否包含重復(fù)項(xiàng)。這相對于實(shí)際的數(shù)據(jù)串聯(lián)可能是非常昂貴的。 copy:boolean,default True。如果為False,請勿不必要地復(fù)制數(shù)據(jù)。
三、豎向堆疊
#構(gòu)建需要的數(shù)據(jù)表
import pandas as pddf1 = pd.DataFrame({'A':['A{}'.format(i) for i in range(0,4)],'B':['B{}'.format(i) for i in range(0,4)],'C':['C{}'.format(i) for i in range(0,4)]})df2 = pd.DataFrame({'A':['A{}'.format(i) for i in range(4,8)],'B':['B{}'.format(i) for i in range(4,8)],'C':['C{}'.format(i) for i in range(4,8)]})df3 = pd.DataFrame({'A':['A{}'.format(i) for i in range(8,12)],'B':['B{}'.format(i) for i in range(8,12)],'C':['C{}'.format(i) for i in range(8,12)]})
現(xiàn)將表構(gòu)成list,然后在作為concat的輸入
frames = [df1, df2, df3]result = pd.concat(frames)A B C0 A0 B0 C01 A1 B1 C12 A2 B2 C23 A3 B3 C30 A4 B4 C41 A5 B5 C52 A6 B6 C63 A7 B7 C70 A8 B8 C81 A9 B9 C92 A10 B10 C103 A11 B11 C11
frames = {'df1':df1, 'df2':df2,'df3':df3}result = pd.concat(frames)A B Cdf1 0 A0 B0 C01 A1 B1 C12 A2 B2 C23 A3 B3 C3df2 0 A4 B4 C41 A5 B5 C52 A6 B6 C63 A7 B7 C7df3 0 A8 B8 C81 A9 B9 C92 A10 B10 C103 A11 B11 C11三、橫向拼接
1、axis
#再構(gòu)建一個(gè)表df4 = pd.DataFrame({'C':['C{}'.format(i) for i in range(3,9)],'E':['E{}'.format(i) for i in range(3,9)],'F':['F{}'.format(i) for i in range(3,9)]})pd.concat([df1,df4], axis=1)A B C C E F0 A0 B0 C0 C3 E3 F31 A1 B1 C1 C4 E4 F42 A2 B2 C2 C5 E5 F53 A3 B3 C3 C6 E6 F64 NaN NaN NaN C7 E7 F75 NaN NaN NaN C8 E8 F8
2、join
# join='inner' 取交集df4], axis=1, join='inner')A B C C E F0 A0 B0 C0 C3 E3 F31 A1 B1 C1 C4 E4 F42 A2 B2 C2 C5 E5 F53 A3 B3 C3 C6 E6 F6# join='outer' 和 默認(rèn)值相同df4], axis=1, join='outer')A B C C E F0 A0 B0 C0 C3 E3 F31 A1 B1 C1 C4 E4 F42 A2 B2 C2 C5 E5 F53 A3 B3 C3 C6 E6 F64 NaN NaN NaN C7 E7 F75 NaN NaN NaN C8 E8 F8四、對比append方法
df1.append(df2)A B C0 A0 B0 C01 A1 B1 C12 A2 B2 C23 A3 B3 C30 A4 B4 C41 A5 B5 C52 A6 B6 C63 A7 B7 C7五、忽略index
df4], axis=1, ignore_index=True)0 1 2 3 4 50 A0 B0 C0 C3 E3 F31 A1 B1 C1 C4 E4 F42 A2 B2 C2 C5 E5 F53 A3 B3 C3 C6 E6 F64 NaN NaN NaN C7 E7 F75 NaN NaN NaN C8 E8 F8六、增加區(qū)分組鍵
1、可以直接用key參數(shù)實(shí)現(xiàn)
keys=['x', 'y', 'z'])A B Cx 0 A0 B0 C01 A1 B1 C12 A2 B2 C23 A3 B3 C3y 0 A4 B4 C41 A5 B5 C52 A6 B6 C63 A7 B7 C7z 0 A8 B8 C81 A9 B9 C92 A10 B10 C103 A11 B11 C11
2、傳入字典來增加分組鍵
frames = {'df1':df1, 'df2':df2,'df3':df3}result = pd.concat(frames)A B Cdf1 0 A0 B0 C01 A1 B1 C12 A2 B2 C23 A3 B3 C3df2 0 A4 B4 C41 A5 B5 C52 A6 B6 C63 A7 B7 C7df3 0 A8 B8 C81 A9 B9 C92 A10 B10 C10????3??A11??B11??C11
七、加入新的行
1、列字段相同的加入
s2 = pd.Series(['X0', 'X1', 'X2', 'X3'], index=['A', 'B', 'C', 'D'])df1.append(s2, ignore_index=True)A B C D0 A0 B0 C0 NaN1 A1 B1 C1 NaN2 A2 B2 C2 NaN3 A3 B3 C3 NaN4 X0 X1 X2 X3
2、列字段不同的加入
dicts = [{'A': 1, 'B': 2, 'C': 3, 'X': 4},{'A': 5, 'B': 6, 'C': 7, 'Y': 8}]df1.append(dicts, ignore_index=True)A B C X Y0 A0 B0 C0 NaN NaN1 A1 B1 C1 NaN NaN2 A2 B2 C2 NaN NaN3 A3 B3 C3 NaN NaN4 1 2 3 4.0 NaN5 5 6 7 NaN 8.0···? END? ···
一網(wǎng)打盡Pandas中的各種索引 iloc,loc,ix,iat,at,直接索引
評論
圖片
表情
