首頁 > 軟體

Pandas資料連線pd.concat的實現

2022-07-22 22:02:04

Pandas資料可以實現縱向和橫向連線,將資料連線後會形成一個新物件(Series或DataFrame)

連線是最常用的多個資料合併操作

pd.concat()是專門用於資料連線合併的函數,它可以沿著行或列進行操作,同時可以指定非合併軸的合併方式(如合集、交集等)

pd.concat()會返回一個合併後的DataFrame

語法

pd.concat(objs, axis=0, join='outer', ignore_index=False, 
          keys=None, levels=None, names=None, sort=False,
          verify_integrity=False, copy=True)

引數 

  • objs: 需要連線的資料,可以是多個DataFrame或者Series,它是必傳引數
  • axis: 連線軸的方法,預設值為0,即按行連線,追加在行後面;值為1時追加到列後面(按列連線:axis=1)
  • join: 合併方式,其他軸上的資料是按交集(inner)還是並集(outer)進行合併
  • ignore_index: 是否保留原來的索引
  • keys: 連線關係,使用傳遞的鍵作為最外層級別來構造層次結構索引,就是給每個表指定一個一級索引
  • names: 索引的名稱,包括多層索引
  • verify_integrity: 是否檢測內容重複;引數為True時,如果合併的資料與原資料包含索引相同的行,則會報錯
  • copy: 如果為False,則不要深拷貝

1.按行連線

pd.concat()的基本操作可以實現df.append()功能

操作中ignore_index和sort引數的作用是一樣的,axis預設取值為0,即按行連線

import pandas as pd
df1 = pd.DataFrame({'x':[1,2],'y':[3,4]})
df2 = pd.DataFrame({'x':[5,6],'y':[7,8]})
res1 = pd.concat([df1,df2])
# 效果同上
res2 = df1.append(df2)

df1

df2

res1

res2 

2.按列連線 

如果要將多個DataFrame按列拼接在一起,可以傳入axis=1引數,這會將不同的資料追加到列的後面,索引無法對應的位置上將值填充為NaN

import pandas as pd
df1 = pd.DataFrame({'x':[1,2],'y':[3,4]})
df2 = pd.DataFrame({'x':[5,6,0],'y':[7,8,0]})
res = pd.concat([df1,df2], axis=1)

df1

df2

res 

該例子中,df2比df1多一行,合併後df1的部分為NaN 

3.合併交集

上述兩個練習案例的連線操作會得到兩個表內容的並集(預設是join='outer')

合併交集需要將join引數進行改變 join='inner'

import pandas as pd
df1 = pd.DataFrame({'x':[1,2],'y':[3,4]})
df2 = pd.DataFrame({'x':[5,6,0],'y':[7,8,0]})
# 按列合併交集
# 傳入join='inner'取得兩個DataFrame的共有部分,去除了df1沒有的第三行內容
res = pd.concat([df1,df2], axis=1, join='inner')

df1

df2

res 

擴充套件 

通過reindex()方法也可以實現取交集功能

# 兩種方法
res1 = pd.concat([df1,df2],axis=1).reindex(df1.index)
res2 = pd.concat([df1,df2.reindex(df1.index)],axis=1)

res1

res2 

4.與序列合併 

import pandas as pd
z = pd.Series([9,9],name='z')
df = pd.DataFrame({'x':[1,2],'y':[3,4]})
# 將序列加到新列
res = pd.concat([df,z],axis=1)

z

df

res 

5.指定索引

import pandas as pd
df1 = pd.DataFrame({'x':[1,2],'y':[3,4]})
df2 = pd.DataFrame({'x':[5,6],'y':[7,8]})
# 指定索引名
res1 = pd.concat([df1,df2], keys=['a','b'])
# 以字典形式傳入
dict = {'a':df1, 'b':df2}
res2 = pd.concat(dict)
# 橫向合併,指定索引
res3 = pd.concat([df1,df2], axis=1, keys=['a','b'])

df1

df2

res1

res2

res3 

到此這篇關於Pandas資料連線pd.concat的實現的文章就介紹到這了,更多相關Pandas資料連線pd.concat內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com