dataframe的橫向合併

2021-09-07 15:54:44 字數 3458 閱讀 6938

我們在用python處理資料的時候,很多時候會遇到資料合併的問題,我們在這裡介紹dataframe的合併問題,橫向合併我們介紹三種方法:

1.1 merge

類似於關係型資料庫的連線方式,可以根據乙個或多個鍵將不同的datframe連線起來。該函式的典型應用場景是,針對同乙個主鍵存在兩張不同欄位的表,根據主鍵整合到一張表裡面。

merge(left, right, how='inner', on=none, left_on=none, right_on=none,  

left_index=false, right_index=false, sort=true,

suffixes=('_x', '_y'), copy=true, indicator=false)

引數介紹:

left和right:兩個不同的dataframe;

how:連線方式,有inner、left、right、outer,預設為inner;

on:指的是用於連線的列索引名稱,必須存在於左右兩個dataframe中,如果沒有指定且其他引數也沒有指定,則以兩個dataframe列名交集作為連線鍵;

left_on:左側dataframe中用於連線鍵的列名,這個引數左右列名不同但代表的含義相同時非常的有用;

right_on:右側dataframe中用於連線鍵的列名;

left_index:使用左側dataframe中的行索引作為連線鍵;

right_index:使用右側dataframe中的行索引作為連線鍵;

sort:預設為true,將合併的資料進行排序,設定為false可以提高效能;

suffixes:字串值組成的元組,用於指定當左右dataframe存在相同列名時在列名後面附加的字尾名稱,預設為(』_x』, 『_y』);

copy:預設為true,總是將資料複製到資料結構中,設定為false可以提高效能;

indicator:顯示合併資料中資料的**情況

舉例:

import pandas as pd 

from pandas import dataframe

df1=dataframe(

)

key data1

0 a 0

1 b 1

2 b 2

df2=dataframe(

) key data2

0 a 0

1 b 1

2 c 2

# 1.預設以重疊的列名當做連線鍵。

pd.merge(df1,df2)

#沒有指定連線鍵,預設用重疊列名,沒有指定連線方式

data1 key data2

00 a 0

11 b 1

22 b 1

# 2.預設做inner連線(取key的交集),連線方式還有(left,right,outer),制定連線方式加引數:how=''

pd.merge(df2,df1)

data2 key data1

00 a 0

11 b 1

21 b 2

#缺省內連線,可以看見c沒有連線上。

pd.merge(df2,df1,how=

'left'

)#通過how,指定連線方式

data2 key data1

00 a 0

11 b 1

21 b 2

32 c nan

# 3.多鍵連線時將連線鍵組成列表傳入,例:pd.merge(df1,df2,on=['key1','key2']

right=dataframe(

) left=dataframe(

) right=dataframe(

) pd.merge(left,right,on=

['key1'

,'key2'

],how=

'outer'

)#傳出陣列

key1 key2 lval_x lval_y

0 foo one 1

41 foo one 1

52 foo two 2 nan

3 bar one 3

64 bar two nan 7

# 4.如果兩個物件的列名不同,可以分別指定,例:pd.merge(df1,df2,left_on='lkey',right_on='rkey')

df3=dataframe(

) pd.merge(left,df3,left_on=

'key1'

,right_on=

'key3'

)#鍵名不同的連線

key1 key2 lval_x key3 key4 lval_y

0 foo one 1 foo one 4

1 foo one 1 foo one 5

2 foo two 2 foo one 4

3 foo two 2 foo one 5

4 bar one 3 bar one 6

5 bar one 3 bar two 7

1.2 join

join主要是基於引索的縱向合併

x=cdata.join(maxdata)
1.3 concat

concat方法相當於資料庫中的全連線(union all),它不僅可以指定連線的方式(outer join或inner join)還可以指定按照某個軸進行連線。與資料庫不同的是,它不會去重,但是可以使用drop_duplicates方法達到去重的效果。

concat(objs, axis=

0, join=

'outer'

, join_axes=

none

, ignore_index=

false

, keys=

none

, levels=

none

, names=

none

, verify_integrity=

false

, copy=

true

):

dat=pd.concat(

[cdata,maxdata,mindata,x]

,axis=

1)

Pandas 橫向合併DataFrame資料

要保證對應列的資料型別是一致的!不要出現,a的datetime型別是timestemp b的datetime型別是str。否則橫向合併時會出現合併上去的列為nan。需要將兩個dataframe進行橫向拼接 對 a dataframe 拼接一列資料 資料樣例如下 將右側source df中的 fact...

DataFrame資料合併

一 join 作用 預設情況下,他是把行索引相同的資料合併到一起 注意 以左為準,沒有的部分用nan補全 例子import pandas as pd import numpy as np df1 pd.dataframe data np.zeros 2,5 index list ab columns...

python合併dataframe物件

每次分析資料過程中,總是會遇到各種問題,一時間想不起來。都說事不過三,這事出了不少次數了,這裡還是記下來,但是可能不那麼全,記下來也僅僅為了以後本人自己需要。這裡宣告如下三個dataframe b np.random.random 3,2 a pd.dataframe b,columns a1 a2...