
本篇文章主要介紹了pandas中對(duì)series和dataframe對(duì)象進(jìn)行連接的方法:pd.append()和pd.concat(),文中通過(guò)示例代碼對(duì)這兩種方法進(jìn)行了詳細(xì)的介紹,希望能對(duì)各位python小白的學(xué)習(xí)有所幫助。
描述:append方法用以在表尾中添加新的行,并返回追加后的數(shù)據(jù)對(duì)象,若追加的行中存在原數(shù)據(jù)沒(méi)有的列,會(huì)新增一列,并用nan填充;若追加的行數(shù)據(jù)中缺少原數(shù)據(jù)某列,同樣以nan填充
語(yǔ)法:df.append(other, ignore_index=False, verify_integrity=False, sort=None)
參數(shù)說(shuō)明:
下面對(duì)append方法的每個(gè)參數(shù)進(jìn)行詳細(xì)介紹:
第一個(gè)參數(shù)為other:要追加的數(shù)據(jù),可以是dataframe,series,字典,列表甚至是元素;但前后類型要一致。
# 將數(shù)據(jù)追加到series <<< a=df.iloc[0,:] <<< b=df.iloc[6,:] <<< a.append(b) #需賦給新值,不改變?cè)瓟?shù)組 A 0 B 1 C 2 D 3 E 4 F 5 A 36 B 37 C 38 D 39 E 40 F 41 dtype: int32 <<< a A 0 B 1 C 2 D 3 E 4 F 5 Name: S1, dtype: int32 <<< c=a.append(b) # 保存為c <<< c A 0 B 1 C 2 D 3 E 4 F 5 A 36 B 37 C 38 D 39 E 40 F 41 dtype: int32
# 將數(shù)據(jù)追加到dataframe <<< a=df.iloc[0:2,:] <<< b=df.iloc[4:6,:] <<< c=a.append(b) # 注意是縱向追加,不支持橫向追加 <<< c A B C D E F S1 0 1 2 3 4 5 S2 6 7 8 9 10 11 S5 24 25 26 27 28 29 S6 30 31 32 33 34 35
注意:獲取單行得到的結(jié)果是一維數(shù)組,當(dāng)一維數(shù)組[6,:]和二維數(shù)組[2,6]追加時(shí),會(huì)得到8*7的數(shù)組,匹配不上的地方用NA填充。
# 將二維數(shù)組追加到一維數(shù)組 <<< a=df.iloc[0,:] <<< b=df.iloc[4:6,:] <<< c=a.append(b) <<< c 0 A B C D E F A 0.0 NaN NaN NaN NaN NaN NaN B 1.0 NaN NaN NaN NaN NaN NaN C 2.0 NaN NaN NaN NaN NaN NaN D 3.0 NaN NaN NaN NaN NaN NaN E 4.0 NaN NaN NaN NaN NaN NaN F 5.0 NaN NaN NaN NaN NaN NaN S5 NaN 24.0 25.0 26.0 27.0 28.0 29.0 S6 NaN 30.0 31.0 32.0 33.0 34.0 35.0
# 列表追加到列表 <<< a=[] <<< b=df.iloc[6,:].tolist() <<< a.append(b) <<< a [[36, 37, 38, 39, 40, 41]] # 序列追加到列表 <<< a=[1,2,3,4,5,6,7] <<< b=df.iloc[6,:] <<< a.append(b) <<< a [1, 2, 3, 4, 5, 6, 7, A 36 B 37 C 38 D 39 E 40 F 41 Name: S7, dtype: int32]
<<< df1=pd.DataFrame() <<< a={'A':1,'B':2} <<< df1=df1.append(a,ignore_index=True) <<< df1 A B 0 1 2
append方法也可以將單個(gè)元素追加到列表(其他對(duì)象不行),會(huì)自動(dòng)將單個(gè)元素轉(zhuǎn)為列表對(duì)象,再進(jìn)行追加操作
# 單個(gè)元素進(jìn)行追加 <<< a=[1,2,3,4,5,6,7,8] <<< a.append(9) <<< a [1, 2, 3, 4, 5, 6, 7, 8, 9]
<<< df1=pd.DataFrame() <<< ser=pd.Series({"x":1,"y":2},name="a") <<< df1=df1.append(ser) <<< df1 x y a 1 2
如果不添加name,也可以添加參數(shù)ignore_index:
<<< df1=pd.DataFrame() <<< ser=pd.Series({"x":1,"y":2}) <<< df1=df1.append(ser,ignore_index=True) <<< df1 x y a 1 2
第二個(gè)參數(shù):兩個(gè)表的index是否有實(shí)際含義,默認(rèn)ignore_index=False,若為T(mén)rue,表根據(jù)列名對(duì)齊合并,生成新的index。
<<< a=df.iloc[0:2,:] <<< b=df.iloc[4:6,:] <<< a.append(b,ignore_index=True) A B C D E F 0 0 1 2 3 4 5 1 6 7 8 9 10 11 2 24 25 26 27 28 29 3 30 31 32 33 34 35 <<< a=df.iloc[0:2,:] <<< b=df.iloc[4:6,:] <<< a.append(b) A B C D E F S1 0 1 2 3 4 5 S2 6 7 8 9 10 11 S5 24 25 26 27 28 29 S6 30 31 32 33 34 35
在dataframe中,使用append方法進(jìn)行表合并時(shí),二者匹配不上的地方用NAN填充。
<<< df1=df.copy() <<< df2=pd.DataFrame(np.arange(8).reshape(2,4),columns=<<<['s1','s2','s3','s4']) <<< df_new=df1.append(df2,ignore_index=True) <<< df_new A B C D E F S1 S2 s3 s4 0 0 1 2 3 4 5 NaN NaN NaN NaN 1 6 7 8 9 10 11 NaN NaN NaN NaN 2 12 13 14 15 16 17 NaN NaN NaN NaN 3 18 19 20 21 22 23 NaN NaN NaN NaN 4 24 25 26 27 28 29 NaN NaN NaN NaN 5 30 31 32 33 34 35 NaN NaN NaN NaN 6 36 37 38 39 40 41 NaN NaN NaN NaN 7 NaN NaN NaN NaN NaN NaN 0 1 2 3 8 NaN NaN NaN NaN NaN NaN 4 5 6 7
第三個(gè)參數(shù)為verify_integrity:默認(rèn)為False 參數(shù)用于檢查結(jié)果對(duì)象新連接軸上的索引是否有重復(fù)項(xiàng),有的話引發(fā) ValueError,可以看到這個(gè)參數(shù)的作用與ignore_index 是互斥的。 (如果 ignore_index = True ,則意味著index不能是重復(fù)的,而ignore_index = False ,則意味著index可以是重復(fù)的)
<<< df1=df.copy() <<< df2=pd.DataFrame(np.arange(8).reshape(2,4),columns= <<< ['G','H','I','J'],index=['S1','S8'],dtype=int) <<< pd.set_option('precision',0) <<< df_new=df1.append(df2,verify_integrity=False) <<< df_new A B C D E F G H I J S1 0 1 2 3 4 5 NaN NaN NaN NaN S2 6 7 8 9 10 11 NaN NaN NaN NaN S3 12 13 14 15 16 17 NaN NaN NaN NaN S4 18 19 20 21 22 23 NaN NaN NaN NaN S5 24 25 26 27 28 29 NaN NaN NaN NaN S6 30 31 32 33 34 35 NaN NaN NaN NaN S7 36 37 38 39 40 41 NaN NaN NaN NaN S1 NaN NaN NaN NaN NaN NaN 0 1 2 3 S8 NaN NaN NaN NaN NaN NaN 4 5 6 7
注意:當(dāng)需要連接的兩個(gè)表的index有重復(fù)值時(shí),設(shè)置ignore_index = True則會(huì)報(bào)錯(cuò)。
第四個(gè)參數(shù)為sort:默認(rèn)是False,該屬性在pandas的0.23.0版本才有,若為T(mén)rue,則對(duì)兩個(gè)表沒(méi)匹配上的列名,進(jìn)行排序,若為False,不排序。
<<< df1=pd.DataFrame(np.arange(8).reshape(2,4),columns= <<< ['A1','B1','C1','D1'],index=['S1','S2']) <<< df2=pd.DataFrame(np.arange(8).reshape(2,4),columns= <<< ['A2','B2','C2','D2'],index=['S1','S3']) <<< pd.set_option('precision',0) <<< df_new=df1.append(df2,sort=True) <<< df_new A1 A2 B1 B2 C1 C2 D1 D2 S1 0 NaN 1 NaN 2 NaN 3 NaN S2 4 NaN 5 NaN 6 NaN 7 NaN S1 NaN 0 NaN 1 NaN 2 NaN 3 S3 NaN 4 NaN 5 NaN 6 NaN 7
描述:concat方法用以將兩個(gè)或多個(gè)pandas對(duì)象根據(jù)軸(橫向/縱向)進(jìn)行拼接,concat函數(shù)是在pandas命名空間下的方法,因此需要通過(guò)pd.concat()的方式來(lái)引用。
語(yǔ)法:pd.concat(‘objs’, ‘a(chǎn)xis=0’, “join=‘outer’”, ‘join_axes=None’, ‘ignore_index=False’, ‘keys=None’, ‘levels=None’, ‘names=None’, ‘verify_integrity=False’, ‘sort=None’, ‘copy=True’)
常用參數(shù):
下面,將對(duì)concat方法以上各個(gè)參數(shù)進(jìn)行詳細(xì)說(shuō)明:
第一個(gè)要學(xué)習(xí)的參數(shù)為objs:要進(jìn)行拼接的pandas對(duì)象,可用中括號(hào)[]將兩個(gè)或多個(gè)對(duì)象括起來(lái)。
1)對(duì)series進(jìn)行拼接
<<< ser1=pd.Series(np.arange(9)) <<< ser2=pd.Series(np.arange(9)) # 對(duì)兩個(gè)series對(duì)象進(jìn)行拼接 <<< pd.concat([ser1,ser2]) 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 dtype: int32
<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['A','B','C'],index=['a','b','c']) <<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['D','E','F'],index=['e','f','g']) # 對(duì)兩個(gè)DataFrame對(duì)象進(jìn)行拼接 <<< pd.concat([df1,df2]) A B C D E F a 0 1 2 NaN NaN NaN b 3 4 5 NaN NaN NaN c 6 7 8 NaN NaN NaN e NaN NaN NaN 0 1 2 f NaN NaN NaN 3 4 5 g NaN NaN NaN 6 7 8
第二個(gè)要學(xué)習(xí)的參數(shù)為axis:指定對(duì)象按照那個(gè)軸進(jìn)行拼接,默認(rèn)為0(縱向拼接),1為橫向橫向拼接。
<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['A','B','C'],index=['a','b','c']) <<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['D','E','F'],index=['a','b','d']) # 將數(shù)據(jù)對(duì)象df1和df2沿1軸進(jìn)行拼接,即進(jìn)行橫向拼接 <<< pd.concat([df1,df2],axis=1) A B C D E F a 0 1 2 0 1 2 b 3 4 5 3 4 5 c 6 7 8 NaN NaN NaN d NaN NaN NaN 6 7 8
注意:當(dāng)對(duì)Series進(jìn)行拼接時(shí),設(shè)置axis=0進(jìn)行縱向拼接的結(jié)果對(duì)象為Series,設(shè)置axis=1進(jìn)行橫向拼接的結(jié)果對(duì)象為DataFrame。
<<< ser1=pd.Series(np.arange(9)) <<< ser2=pd.Series(np.arange(9)) # 對(duì)Series進(jìn)行拼接縱向拼接,結(jié)果認(rèn)為Series對(duì)象 <<< a=pd.concat([ser1,ser2],axis=0) <<< type(a) pandas.core.series.Series # 對(duì)Series進(jìn)行拼接橫向拼接,結(jié)果轉(zhuǎn)換為DataFrame對(duì)象 <<< b=pd.concat([ser1,ser2],axis=1) <<< type(b) pandas.core.frame.DataFrame
第三個(gè)要學(xué)習(xí)的參數(shù)為join:拼接的方式,inner為交集,outer為并集,橫向拼接時(shí)由index的交/并集決定,縱向拼接時(shí)由columns的交/并集決定,同時(shí),如果join=outer,匹配不上的地方以nan填充。
<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['A','B','C'],index=['a','b','c']) <<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['D','E','F'],index=['a','b','d']) # 將df1和df2進(jìn)行橫向合并,取二者的并集 <<< pd.concat([df1,df2],axis=1) A B C D E F a 0 1 2 0 1 2 b 3 4 5 3 4 5 c 6 7 8 NaN NaN NaN d NaN NaN NaN 6 7 8 # 將df1和df2進(jìn)行橫向合并,只取二者的交集 <<< pd.concat([df1,df2],axis=1,join='inner') A B C D E F a 0 1 2 0 1 2 b 3 4 5 3 4 5
第四個(gè)要學(xué)習(xí)的參數(shù)為join_axes:以哪個(gè)數(shù)據(jù)對(duì)象的index/columns作為軸進(jìn)行拼接,當(dāng)進(jìn)行橫向拼接時(shí),join_axes為index的列表,如需根據(jù)df1對(duì)齊數(shù)據(jù),則會(huì)保留df1的index,再將df2的數(shù)據(jù)進(jìn)行拼接;同理,縱向拼接時(shí)為columns的列表。
<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['A','B','C'],index=['a','b','c']) <<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['D','E','F'],index=['a','b','d']) # 根據(jù)df1的index對(duì)齊數(shù)據(jù) <<< pd.concat([df1,df2],axis=1,join_axes=[df1.index]) A B C D E F a 0 1 2 0 1 2 b 3 4 5 3 4 5 c 6 7 8 NaN NaN NaN # 根據(jù)df2的index對(duì)齊數(shù)據(jù) <<< pd.concat([df1,df2],axis=1,join_axes=[df2.index]) A B C D E F a 0 1 2 0 1 2 b 3 4 5 3 4 5 d NaN NaN NaN 6 7 8
第五個(gè)要學(xué)習(xí)的參數(shù)為ignore_index:默認(rèn)為False,如果設(shè)置為true,則無(wú)視表原來(lái)的軸標(biāo)簽,直接合并,合并后生成新的軸標(biāo)簽。
這里需要注意的是,與append方法只能進(jìn)行縱向拼接不同,concat方法既可以進(jìn)行橫向拼接,也可以進(jìn)行縱向拼接,若設(shè)置ignore_index=True,當(dāng)進(jìn)行橫向拼接時(shí),則無(wú)視原表的columns,直接合并,合并后生成默認(rèn)的columns;同理,當(dāng)進(jìn)行縱向拼接時(shí),則是忽略原表的index,生成新的index。
<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['A','B','C'],index=['a','b','c']) <<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['D','E','F'],index=['a','b','d']) # 橫向拼接時(shí),忽略的是columns,index仍起作用 <<< pd.concat([df1,df2],axis=1,ignore_index=True) 0 1 2 3 4 5 a 0 1 2 0 1 2 b 3 4 5 3 4 5 c 6 7 8 NaN NaN NaN d NaN NaN NaN 6 7 8 # 縱向拼接時(shí),忽略的是index,columns仍起作用 pd.concat([df1,df2],axis=0,ignore_index=True) 0 1 2 3 4 5 a 0 1 2 0 1 2 b 3 4 5 3 4 5 c 6 7 8 NaN NaN NaN d NaN NaN NaN 6 7 8
第六個(gè)要學(xué)習(xí)的參數(shù)為keys:表標(biāo)識(shí)的列表,用來(lái)區(qū)分合并后的數(shù)據(jù)來(lái)源于哪個(gè)表,當(dāng)ignore_index=True時(shí),此參數(shù)的作用失效。
<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['A','B','C'],index=['a','b','c']) <<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns= <<< ['D','E','F'],index=['a','b','d']) # 設(shè)置ignore_index=True時(shí),參數(shù)keys不起作用 <<< pd.concat([df1,df2],axis=1,ignore_index=True,keys= <<< ['df1','df2']) 0 1 2 3 4 5 a 0 1 2 0 1 2 b 3 4 5 3 4 5 c 6 7 8 NaN NaN NaN d NaN NaN NaN 6 7 8 # 設(shè)置ignore_index=False,會(huì)根據(jù)keys的列表標(biāo)識(shí)結(jié)果中的數(shù)據(jù)來(lái)源 <<< pd.concat([df1,df2],axis=1,ignore_index=False,keys= <<< ['df1','df2']) df1 df2 A B C D E F a 0 1 2 0 1 2 b 3 4 5 3 4 5 c 6 7 8 NaN NaN NaN d NaN NaN NaN 6 7 8
總結(jié):
如對(duì)append和concat方法還感興趣,建議可前往查看官方文檔:
1)https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.append.html?highlight=append#pandas.DataFrame.append
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03