包含在pandas对象的数据可以通过多种方式联合在一起:
- pandas.merge根据一个或多个键将行进行连接。对于SQL或其他关系型数据库的用户来说,这种方式比较熟悉,它实现的是数据库的连接操作。
- pandas.concat使对象在轴向上进行黏合或”堆叠”。
- combine_first实例方法允许将重叠的数据拼接在一起,以使用一个对象中的值填充另一个对象中的缺失值。
1.1、两个df都存在相同key,进行merge
df1 = pd.DataFrame({'col1':range(6), 'col1_2':['a', 'b', 'c', 'd', 'e', 'f']})
df1
Out[63]:
col1 col1_2
0 0 a
1 1 b
2 2 c
3 3 d
4 4 e
5 5 f
df2 = pd.DataFrame({'col1':range(4), 'col2_2':['a', 'c', 'e', 'f']})
df2
Out[64]:
col1 col2_2
0 0 a
1 1 c
2 2 e
3 3 f
df1.merge(df2)
Out[65]:
col1 col1_2 col2_2
0 0 a a
1 1 b c
2 2 c e
3 3 d f
df1.merge(df2, on='col1')
Out[66]:
col1 col1_2 col2_2
0 0 a a
1 1 b c
2 2 c e
3 3 d f
1.2、 两个df的列名不同,指定列名merge
df2 = pd.DataFrame({'col2':range(4), 'col2_2':['a', 'c', 'e', 'f']})
df2
Out[68]:
col2 col2_2
0 0 a
1 1 c
2 2 e
3 3 f
df1
Out[69]:
col1 col1_2
0 0 a
1 1 b
2 2 c
3 3 d
4 4 e
5 5 f
df1.merge(df2, left_on='col1', right_on='col2')
Out[70]:
col1 col1_2 col2 col2_2
0 0 a 0 a
1 1 b 1 c
2 2 c 2 e
3 3 d 3 f
你可能注意到结果中缺少4和5的值以及相关的数据。默认情况下,merge做的是内连接(’inner’join),结果中的键是两张表的交集。其他可选的选项有’left’、’right’和’outer’。外连接(outer join)是键的并集,联合了左连接和右连接的效果。
2.1、将两个df进行左连接和右连接
df2 = pd.DataFrame({'col1':range(4), 'col2_2':['a', 'c', 'e', 'f']})
df2
Out[73]:
col1 col2_2
0 0 a
1 1 c
2 2 e
3 3 f
df1.merge(df2, on='col1', how='left')
Out[72]:
col1 col1_2 col2_2
0 0 a a
1 1 b c
2 2 c e
3 3 d f
4 4 e NaN
5 5 f NaN
df1.merge(df2, on='col1', how='right')
Out[74]:
col1 col1_2 col2_2
0 0 a a
1 1 b c
2 2 c e
3 3 d f
2.2、两个df进行外连接
外连接(outer join)是键的并集,联合了左连接和右连接的效果:
df1.merge(df2, on='col1', how='outer')
Out[75]:
col1 col1_2 col2_2
0 0 a a
1 1 b c
2 2 c e
3 3 d f
4 4 e NaN
5 5 f NaN
3、how参数的不同连接类型
; 4、使用多个键进行合并
传入一个列名的列表
left_df = pd.DataFrame({'col1':['aaa', 'bbb', 'ccc', 'ddd'], 'col2':['123', '123', '321', '132'], 'val':[22.1, 234.4, 90.2, 84.1]})
left_df
Out[84]:
col1 col2 val
0 aaa 123 22.1
1 bbb 123 234.4
2 ccc 321 90.2
3 ddd 132 84.1
right_df = pd.DataFrame({'col1':['bbb', 'bbb', 'aaa', 'ddd'], 'col2':['123', '123', '321', '132'], 'val':[0.1, 0.4, 0.2, 1.1]})
right_df
Out[87]:
col1 col2 val
0 bbb 123 0.1
1 bbb 123 0.4
2 aaa 321 0.2
3 ddd 132 1.1
pd.merge(left_df, right_df, on=['col1', 'col2'], how='inner')
Out[86]:
col1 col2 val_x val_y
0 bbb 123 234.4 0.1
1 bbb 123 234.4 0.4
2 ddd 132 84.1 1.1
待续。。。
Original: https://blog.csdn.net/weixin_36893273/article/details/123198958
Author: 就是一顿骚操作
Title: 随笔记录——pandas(数据联合与合并)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/678548/
转载文章受原作者版权保护。转载请注明原作者出处!