欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pandas dataframe的合并實現(xiàn)(append, merge, concat)

 更新時間:2019年06月24日 14:13:13   作者:GUXH  
這篇文章主要介紹了pandas dataframe的合并實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

創(chuàng)建2個DataFrame:

>>> df1 = pd.DataFrame(np.ones((4, 4))*1, columns=list('DCBA'), index=list('4321'))
>>> df2 = pd.DataFrame(np.ones((4, 4))*2, columns=list('FEDC'), index=list('6543'))
>>> df3 = pd.DataFrame(np.ones((4, 4))*3, columns=list('FEBA'), index=list('6521'))
>>> df1
  D  C  B  A
4 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
>>> df2
  F  E  D  C
6 2.0 2.0 2.0 2.0
5 2.0 2.0 2.0 2.0
4 2.0 2.0 2.0 2.0
3 2.0 2.0 2.0 2.0
>>> df3
  F  E  B  A
6 3.0 3.0 3.0 3.0
5 3.0 3.0 3.0 3.0
2 3.0 3.0 3.0 3.0
1 3.0 3.0 3.0 3.0 
  

1,concat

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

 示例:

>>> pd.concat([df1, df2])
  A  B  C  D  E  F
4 1.0 1.0 1.0 1.0 NaN NaN
3 1.0 1.0 1.0 1.0 NaN NaN
2 1.0 1.0 1.0 1.0 NaN NaN
1 1.0 1.0 1.0 1.0 NaN NaN
6 NaN NaN 2.0 2.0 2.0 2.0
5 NaN NaN 2.0 2.0 2.0 2.0
4 NaN NaN 2.0 2.0 2.0 2.0
3 NaN NaN 2.0 2.0 2.0 2.0 

1.1,axis

默認值:axis=0
axis=0:豎方向(index)合并,合并方向index作列表相加,非合并方向columns取并集
axis=1:橫方向(columns)合并,合并方向columns作列表相加,非合并方向index取并集
axis=0:

>>> pd.concat([df1, df2], axis=0)
  A  B  C  D  E  F
4 1.0 1.0 1.0 1.0 NaN NaN
3 1.0 1.0 1.0 1.0 NaN NaN
2 1.0 1.0 1.0 1.0 NaN NaN
1 1.0 1.0 1.0 1.0 NaN NaN
6 NaN NaN 2.0 2.0 2.0 2.0
5 NaN NaN 2.0 2.0 2.0 2.0
4 NaN NaN 2.0 2.0 2.0 2.0
3 NaN NaN 2.0 2.0 2.0 2.0  

axis=1:

>>> pd.concat([df1, df2], axis=1)
  D  C  B  A  F  E  D  C
1 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
2 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
3 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
4 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
5 NaN NaN NaN NaN 2.0 2.0 2.0 2.0
6 NaN NaN NaN NaN 2.0 2.0 2.0 2.0 

備注:原df中,取并集的行/列名稱不能有重復項,即axis=0時columns不能有重復項,axis=1時index不能有重復項:

>>> df1.columns = list('DDBA')
>>> pd.concat([df1, df2], axis=0)
ValueError: Plan shapes are not aligned 

1.2,join

默認值:join=‘outer'
非合并方向的行/列名稱:取交集(inner),取并集(outer)。
axis=0時join='inner',columns取交集:

>>> pd.concat([df1, df2], axis=0, join='inner')
  D  C
4 1.0 1.0
3 1.0 1.0
2 1.0 1.0
1 1.0 1.0
6 2.0 2.0
5 2.0 2.0
4 2.0 2.0
3 2.0 2.0 

axis=1時join='inner',index取交集:

>>> pd.concat([df1, df2], axis=1, join='inner')
  D  C  B  A  F  E  D  C
4 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
3 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 

1.3,join_axes

默認值:join_axes=None,取并集
合并后,可以設置非合并方向的行/列名稱,使用某個df的行/列名稱
axis=0時join_axes=[df1.columns],合并后columns使用df1的:

>>> pd.concat([df1, df2], axis=0, join_axes=[df1.columns])
  D  C  B  A
4 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
6 2.0 2.0 NaN NaN
5 2.0 2.0 NaN NaN
4 2.0 2.0 NaN NaN
3 2.0 2.0 NaN NaN 

axis=1時axes=[df1.index],合并后index使用df2的:

pd.concat([df1, df2], axis=1, join_axes=[df1.index])
  D  C  B  A  F  E  D  C
4 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
3 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
2 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
1 1.0 1.0 1.0 1.0 NaN NaN NaN NaN 

同時設置join和join_axes的,以join_axes為準:

>>> pd.concat([df1, df2], axis=0, join='inner', join_axes=[df1.columns])
  D  C  B  A
4 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
6 2.0 2.0 NaN NaN
5 2.0 2.0 NaN NaN
4 2.0 2.0 NaN NaN
3 2.0 2.0 NaN NaN 

1.4,ignore_index

默認值:ignore_index=False

合并方向是否忽略原行/列名稱,而采用系統(tǒng)默認的索引,即從0開始的int。

axis=0時ignore_index=True,index采用系統(tǒng)默認索引:

>>> pd.concat([df1, df2], axis=0, ignore_index=True)
  A  B  C  D  E  F
0 1.0 1.0 1.0 1.0 NaN NaN
1 1.0 1.0 1.0 1.0 NaN NaN
2 1.0 1.0 1.0 1.0 NaN NaN
3 1.0 1.0 1.0 1.0 NaN NaN
4 NaN NaN 2.0 2.0 2.0 2.0
5 NaN NaN 2.0 2.0 2.0 2.0
6 NaN NaN 2.0 2.0 2.0 2.0
7 NaN NaN 2.0 2.0 2.0 2.0 

axis=1時ignore_index=True,columns采用系統(tǒng)默認索引:

>>> pd.concat([df1, df2], axis=1, ignore_index=True)
  0  1  2  3  4  5  6  7
1 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
2 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
3 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
4 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
5 NaN NaN NaN NaN 2.0 2.0 2.0 2.0
6 NaN NaN NaN NaN 2.0 2.0 2.0 2.0 

1.5,keys

默認值:keys=None

可以加一層標簽,標識行/列名稱屬于原來哪個df。

axis=0時設置keys:

>>> pd.concat([df1, df2], axis=0, keys=['x', 'y'])
   A  B  C  D  E  F
x 4 1.0 1.0 1.0 1.0 NaN NaN
 3 1.0 1.0 1.0 1.0 NaN NaN
 2 1.0 1.0 1.0 1.0 NaN NaN
 1 1.0 1.0 1.0 1.0 NaN NaN
y 6 NaN NaN 2.0 2.0 2.0 2.0
 5 NaN NaN 2.0 2.0 2.0 2.0
 4 NaN NaN 2.0 2.0 2.0 2.0
 3 NaN NaN 2.0 2.0 2.0 2.0 

axis=1時設置keys:

>>> pd.concat([df1, df2], axis=1, keys=['x', 'y'])
   x          y        
   D  C  B  A  F  E  D  C
1 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
2 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
3 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
4 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
5 NaN NaN NaN NaN 2.0 2.0 2.0 2.0
6 NaN NaN NaN NaN 2.0 2.0 2.0 2.0  

也可以傳字典取代keys:

>>> pd.concat({'x': df1, 'y': df2}, axis=0)
   A  B  C  D  E  F
x 4 1.0 1.0 1.0 1.0 NaN NaN
 3 1.0 1.0 1.0 1.0 NaN NaN
 2 1.0 1.0 1.0 1.0 NaN NaN
 1 1.0 1.0 1.0 1.0 NaN NaN
y 6 NaN NaN 2.0 2.0 2.0 2.0
 5 NaN NaN 2.0 2.0 2.0 2.0
 4 NaN NaN 2.0 2.0 2.0 2.0
 3 NaN NaN 2.0 2.0 2.0 2.0 

1.6,levels

默認值:levels=None

明確行/列名稱取值范圍:

>>> pd.concat([df1, df2], axis=0, keys=['x', 'y'], levels=[['x', 'y', 'z', 'w']])
>>> df.index.levels
[['x', 'y', 'z', 'w'], ['1', '2', '3', '4', '5', '6']] 

1.7,sort

默認值:sort=True,提示新版本會設置默認為False,并取消該參數(shù)

但0.22.0中雖然取消了,還是設置為True

非合并方向的行/列名稱是否排序。例如1.1中默認axis=0時columns進行了排序,axis=1時index進行了排序。

axis=0時sort=False,columns不作排序:

>>> pd.concat([df1, df2], axis=0, sort=False)
  D  C  B  A  F  E
4 1.0 1.0 1.0 1.0 NaN NaN
3 1.0 1.0 1.0 1.0 NaN NaN
2 1.0 1.0 1.0 1.0 NaN NaN
1 1.0 1.0 1.0 1.0 NaN NaN
6 2.0 2.0 NaN NaN 2.0 2.0
5 2.0 2.0 NaN NaN 2.0 2.0
4 2.0 2.0 NaN NaN 2.0 2.0
3 2.0 2.0 NaN NaN 2.0 2.0 

axis=1時sort=False,index不作排序:

>>> pd.concat([df1, df2], axis=1, sort=False)
  D  C  B  A  F  E  D  C
4 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
3 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0
2 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
1 1.0 1.0 1.0 1.0 NaN NaN NaN NaN
6 NaN NaN NaN NaN 2.0 2.0 2.0 2.0
5 NaN NaN NaN NaN 2.0 2.0 2.0 2.0 

1.8,concat多個DataFrame

>>> pd.concat([df1, df2, df3], sort=False, join_axes=[df1.columns])
  D  C  B  A
4 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
6 2.0 2.0 NaN NaN
5 2.0 2.0 NaN NaN
4 2.0 2.0 NaN NaN
3 2.0 2.0 NaN NaN
6 NaN NaN 3.0 3.0
5 NaN NaN 3.0 3.0
2 NaN NaN 3.0 3.0
1 NaN NaN 3.0 3.0 

2,append

append(self, other, ignore_index=False, verify_integrity=False) 

豎方向合并df,沒有axis屬性

不會就地修改,而是會創(chuàng)建副本

示例:

>>> df1.append(df2)  # 相當于pd.concat([df1, df2])
  A  B  C  D  E  F
4 1.0 1.0 1.0 1.0 NaN NaN
3 1.0 1.0 1.0 1.0 NaN NaN
2 1.0 1.0 1.0 1.0 NaN NaN
1 1.0 1.0 1.0 1.0 NaN NaN
6 NaN NaN 2.0 2.0 2.0 2.0
5 NaN NaN 2.0 2.0 2.0 2.0
4 NaN NaN 2.0 2.0 2.0 2.0
3 NaN NaN 2.0 2.0 2.0 2.0   

2.1,ignore_index屬性

>>> df1.append(df2, ignore_index=True)
  A  B  C  D  E  F
0 1.0 1.0 1.0 1.0 NaN NaN
1 1.0 1.0 1.0 1.0 NaN NaN
2 1.0 1.0 1.0 1.0 NaN NaN
3 1.0 1.0 1.0 1.0 NaN NaN
4 NaN NaN 2.0 2.0 2.0 2.0
5 NaN NaN 2.0 2.0 2.0 2.0
6 NaN NaN 2.0 2.0 2.0 2.0
7 NaN NaN 2.0 2.0 2.0 2.0

2.2,append多個DataFrame

和concat相同,append也支持append多個DataFrame

>>> df1.append([df2, df3], ignore_index=True)
   A  B  C  D  E  F
0  1.0 1.0 1.0 1.0 NaN NaN
1  1.0 1.0 1.0 1.0 NaN NaN
2  1.0 1.0 1.0 1.0 NaN NaN
3  1.0 1.0 1.0 1.0 NaN NaN
4  NaN NaN 2.0 2.0 2.0 2.0
5  NaN NaN 2.0 2.0 2.0 2.0
6  NaN NaN 2.0 2.0 2.0 2.0
7  NaN NaN 2.0 2.0 2.0 2.0
8  3.0 3.0 NaN NaN 3.0 3.0
9  3.0 3.0 NaN NaN 3.0 3.0
10 3.0 3.0 NaN NaN 3.0 3.0
11 3.0 3.0 NaN NaN 3.0 3.0 

3,merge

pd.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,
     validate=None) 

示例:  

>>> left = pd.DataFrame({'A': ['a0', 'a1', 'a2', 'a3'],
             'B': ['b0', 'b1', 'b2', 'b3'],
             'k1': ['x', 'x', 'y', 'y']})
>>> right = pd.DataFrame({'C': ['c1', 'c2', 'c3', 'c4'],
             'D': ['d1', 'd2', 'd3', 'd4'],
             'k1': ['y', 'y', 'z', 'z']})
>>> left
  A  B k1
0 a0 b0 x
1 a1 b1 x
2 a2 b2 y
3 a3 b3 y
>>> right
  C  D k1
0 c1 d1 y
1 c2 d2 y
2 c3 d3 z
3 c4 d4 z 

對df1和df2進行merge:

>>> pd.merge(left, right)
  A  B k1 C  D
0 a2 b2 y c1 d1
1 a2 b2 y c2 d2
2 a3 b3 y c1 d1
3 a3 b3 y c2 d2 

可以看到只有df1和df2的key1=y的行保留了下來,即默認合并后只保留有共同列項并且值相等行(即交集)。

本例中l(wèi)eft和right的k1=y分別有2個,最終構(gòu)成了2*2=4行。

如果沒有共同列會報錯:

>>> del left['k1']
>>> pd.merge(left, right)
pandas.errors.MergeError: No common columns to perform merge on 

3.1,on屬性

新增一個共同列,但沒有相等的值,發(fā)現(xiàn)合并返回是空列表,因為默認只保留所有共同列都相等的行:

>>> left['k2'] = list('1234')
>>> right['k2'] = list('5678')
>>> pd.merge(left, right)
Empty DataFrame
Columns: [B, A, k1, k2, F, E]
Index: [] 

可以指定on,設定合并基準列,就可以根據(jù)k1進行合并,并且left和right共同列k2會同時變換名稱后保留下來:

>>> pd.merge(left, right, on='k1')
  A  B k1 k2_x  C  D  k2_y
0 a2 b2 y   3  c1 d1  5
1 a2 b2 y   3  c2 d2  6
2 a3 b3 y   4  c1 d1  5
3 a3 b3 y   4  c2 d2  6

默認值:on的默認值是所有共同列,本例為:on=['k1', 'k2']

3.2,how屬性

how取值范圍:'inner', 'outer', 'left', 'right'

默認值:how='inner'

‘inner':共同列的值必須完全相等:

>>> pd.merge(left, right, on='k1', how='inner')
  A  B k1 k2_x  C  D  k2_y
0 a2 b2 y   3  c1 d1  5
1 a2 b2 y   3  c2 d2  6
2 a3 b3 y   4  c1 d1  5
3 a3 b3 y   4  c2 d2  6 

‘outer':共同列的值都會保留,left或right在共同列上的差集,會對它們的缺失列項的值賦上NaN:

>>> pd.merge(left, right, on='k1', how='outer')
  A  B k1  k2_x C  D k2_y
0  a0  b0 x  1 NaN NaN NaN
1  a1  b1 x  2 NaN NaN NaN
2  a2  b2 y  3  c1  d1  5
3  a2  b2 y  3  c2  d2  6
4  a3  b3 y  4  c1  d1  5
5  a3  b3 y  4  c2  d2  6
6 NaN NaN z NaN  c3  d3  7
7 NaN NaN z NaN  c4  d4  8 

‘left':根據(jù)左邊的DataFrame確定共同列的保留值,右邊缺失列項的值賦上NaN:

pd.merge(left, right, on='k1', how='left')
  A  B k1 k2_x C  D  k2_y
0 a0 b0 x  1 NaN NaN NaN
1 a1 b1 x  2 NaN NaN NaN
2 a2 b2 y  3  c1  d1  5
3 a2 b2 y  3  c2  d2  6
4 a3 b3 y  4  c1  d1  5
5 a3 b3 y  4  c2  d2  6 

‘right':根據(jù)右邊的DataFrame確定共同列的保留值,左邊缺失列項的值賦上NaN:

>>> pd.merge(left, right, on='k1', how='right')
   A  B k1 k2_x C  D  k2_y
0  a2  b2 y  3 c1 d1  5
1  a3  b3 y  4 c1 d1  5
2  a2  b2 y  3 c2 d2  6
3  a3  b3 y  4 c2 d2  6
4 NaN NaN z NaN c3 d3  7
5 NaN NaN z NaN c4 d4  8 

3.3,indicator

默認值:indicator=False,不顯示合并方式

設置True表示顯示合并方式,即left / right / both:

>>> pd.merge(left, right, on='k1', how='outer', indicator=True)
   A  B k1 k2_x C  D  k2_y   _merge
0  a0  b0 x  1 NaN NaN NaN  left_only
1  a1  b1 x  2 NaN NaN NaN  left_only
2  a2  b2 y  3  c1  d1  5    both
3  a2  b2 y  3  c2  d2  6    both
4  a3  b3 y  4  c1  d1  5    both
5  a3  b3 y  4  c2  d2  6    both
6 NaN NaN z NaN  c3  d3  7 right_only
7 NaN NaN z NaN  c4  d4  8 right_only 

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Django基礎知識 web框架的本質(zhì)詳解

    Django基礎知識 web框架的本質(zhì)詳解

    這篇文章主要介紹了Django基礎知識 web框架的本質(zhì)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python文件讀寫處理日常任務終極工具實例

    Python文件讀寫處理日常任務終極工具實例

    Python文件的讀寫操作時,有很多需要考慮的細節(jié),這包括文件打開方式、讀取和寫入數(shù)據(jù)的方法、異常處理等,在本文中,將深入探討Python中的文件操作,旨在提供全面的指南,幫你充分了解Python文件的讀寫
    2023-11-11
  • tensorflow中tf.reduce_mean函數(shù)的使用

    tensorflow中tf.reduce_mean函數(shù)的使用

    這篇文章主要介紹了tensorflow中tf.reduce_mean函數(shù)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Django分組聚合查詢實例分享

    Django分組聚合查詢實例分享

    在本篇文章里小編給大家分享的是關于Django分組聚合查詢實例內(nèi)容,需要的朋友們可以參考下。
    2020-04-04
  • 基于python實現(xiàn)藍牙通信代碼實例

    基于python實現(xiàn)藍牙通信代碼實例

    這篇文章主要介紹了基于python實現(xiàn)藍牙通信代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • python用TensorFlow做圖像識別的實現(xiàn)

    python用TensorFlow做圖像識別的實現(xiàn)

    這篇文章主要介紹了python用TensorFlow做圖像識別的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • 淺析Python中生成器和迭代器的神奇力量

    淺析Python中生成器和迭代器的神奇力量

    在Python中,生成器和迭代器是實現(xiàn)惰性計算的兩種重要工具,它們可以幫助我們更有效地處理數(shù)據(jù)接下來,小編就來為大家詳細介紹這兩種工具吧
    2023-07-07
  • 基于Python測試程序是否有錯誤

    基于Python測試程序是否有錯誤

    這篇文章主要介紹了基于Python測試程序是否有錯誤,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • python實點云分割k-means(sklearn)詳解

    python實點云分割k-means(sklearn)詳解

    這篇文章主要為大家詳細介紹了Python實點云分割k-means,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Python編寫打字訓練小程序

    Python編寫打字訓練小程序

    這篇文章主要介紹了Python編寫打字訓練小程序,需要的朋友可以參考下
    2019-09-09

最新評論