Pandas中DataFrame关联操作(concat、append、merge、join)

结论:

  • concat与append是属于拼接操作
  • concat简略形式,只能在axis=0上进行合并
  • merge与join属于关联操作,类似于sql中的join操作
  • merge可以实现列与索引上关联操作,join只能索引上关联操作
  • 关联操作基本上用merge就可以了

一、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)

1、aixs=0 行拼接,效果与obj1.append(obj2)是相同的
2、ignore_index=False 是否忽略索引而重建
3、join  “inner”:列的交集 “outer”:列的并集
4、append函数
   pd.append(other, ignore_index=False, verify_integrity=False, sort=None)
   a、other其它dataframe
   b、忽略索引
   c、类似于pd.concat(axis=0)
   

案例:

>>>df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])
>>>df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'E': ['C4', 'C5', 'C6', 'C7'],
                    'F': ['D4', 'D5', 'D6', 'D7']},
                   index=[2, 3, 10, 11])

>>>pd.concat([df1,df2])             # 并集 join

     A   B    C    D    E    F
0   A0  B0   C0   D0  NaN  NaN
1   A1  B1   C1   D1  NaN  NaN
2   A2  B2   C2   D2  NaN  NaN
3   A3  B3   C3   D3  NaN  NaN
2   A4  B4  NaN  NaN   C4   D4
3   A5  B5  NaN  NaN   C5   D5
10  A6  B6  NaN  NaN   C6   D6
11  A7  B7  NaN  NaN   C7   D7
>>>df.append(df2)                    # append操作,concat简略形式,只能在axis=0上进行合并
     A   B    C    D    E    F
0   A0  B0   C0   D0  NaN  NaN
1   A1  B1   C1   D1  NaN  NaN
2   A2  B2   C2   D2  NaN  NaN
3   A3  B3   C3   D3  NaN  NaN
2   A4  B4  NaN  NaN   C4   D4
3   A5  B5  NaN  NaN   C5   D5
10  A6  B6  NaN  NaN   C6   D6
11  A7  B7  NaN  NaN   C7   D7

>>>pd.concat([df1,df2],join='inner')   # 交集 join
     A   B
0   A0  B0
1   A1  B1
2   A2  B2
3   A3  B3
2   A4  B4
3   A5  B5
10  A6  B6
11  A7  B7

>>>pd.concat([df1,df2],join='inner',ignore_index=True)   # 重建索引 ignore_index
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
3  A3  B3
4  A4  B4
5  A5  B5
6  A6  B6
7  A7  B7


>>>pd.concat([df1,df2],axis=1,join_axes=[pd.Index([0,2])])  ### 索引相同的进行合并。

    A   B   C   D    A    B    E    F
0  A0  B0  C0  D0  NaN  NaN  NaN  NaN
2  A2  B2  C2  D2   A4   B4   C4   D4

ps: join_axes表明需要留下的索引。


二、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)

1、left:DataFrame对象
2、right:DataFrame对象
3、how:连接的方式inner、left、right、outer,默认为inner
4、on:用于连接的列名称,必须存在于左右两个DataFrame中,如果没有指定且其他参数也没有指定,则以两个DataFrame列名交集作为连接键
5、left_on,right_on:指定左右两侧连接的列名

案例:

>>>left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})
>>>right = pd.DataFrame({'key': ['K2', 'K3', 'K4', 'K5'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})

>>>pd.merge(left, right, on='key',how='inner')  # 按列key进行inner(交集)操作
    A   B key   C   D
0  A2  B2  K2  C0  D0
1  A3  B3  K3  C1  D1

>>>pd.merge(left, right, on='key',how='left')  # 按列key进行left操作
    A   B key    C    D
0  A0  B0  K0  NaN  NaN
1  A1  B1  K1  NaN  NaN
2  A2  B2  K2   C0   D0
3  A3  B3  K3   C1   D1

PS:left以左边为基准,right以右边为基准

>>> pd.merge(left, right, on='key',how='outer')  # 按列key进行outer操作
     A    B key    C    D
0   A0   B0  K0  NaN  NaN
1   A1   B1  K1  NaN  NaN
2   A2   B2  K2   C0   D0
3   A3   B3  K3   C1   D1
4  NaN  NaN  K4   C2   D2
5  NaN  NaN  K5   C3   D3

PS:以2边为基准



>>> pd.merge(left,right,left_on='A',right_on='B')  #键名不同时的连接  

三、Join操作

函数:

join(self, other, on=None, how='left', lsuffix='', rsuffix='',sort=False):
1、与merge功能类似,区别在于用于索引上的合并

案例: 

>>>left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                     'B': ['B0', 'B1', 'B2']},
                     index=['K0', 'K1', 'K2'])
>>>right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
                      'D': ['D0', 'D2', 'D3']},
                      index=['K0', 'K2', 'K3'])
>>>left.join(right)                           # 以索引,left关联
     A   B    C    D
K0  A0  B0   C0   D0
K1  A1  B1  NaN  NaN
K2  A2  B2   C2   D2

>>>left.join(right,how='outer')               # 以索引,并集
      A    B    C    D
K0   A0   B0   C0   D0
K1   A1   B1  NaN  NaN
K2   A2   B2   C2   D2
K3  NaN  NaN   C3   D3
>>>left.join(right,how='inner')                 # 以索引,交集
     A   B   C   D
K0  A0  B0  C0  D0
K2  A2  B2  C2  D2


>>>pd.merge(left, right, left_index=True, right_index=True, how='outer') #merge索引并集
      A    B    C    D
K0   A0   B0   C0   D0
K1   A1   B1  NaN  NaN
K2   A2   B2   C2   D2
K3  NaN  NaN   C3   D3
>>>pd.merge(left, right, left_index=True, right_index=True, how='inner')#merge索引交集
     A   B   C   D
K0  A0  B0  C0  D0
K2  A2  B2  C2  D2

参考文献:

官方文档: http://pandas.pydata.org/pandas-docs/stable/merging.html

猜你喜欢

转载自blog.csdn.net/ai_1046067944/article/details/86481276
今日推荐