pandas9 合并数据

2.合并数据

2.1 merge合并数据

python中的merge函数是通过一个或多个键将两个DataFrame按行合并起来,与SQL中的join用法类似。

merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=Flase, right_index=Flase, sort=Flase, suffiex=('_x', '_y'), copy=True, indicator=Flase, validate=None)

参数说明
left参与合并的左边的DataFrame
right参与合并的右边的DataFrame
how连接方式:inner, left, right, outer【交集,左,右,并集】
on用于连接的列名
left_on左侧DataFrame中用于连接键的列
right_on右侧DataFrame用于连接键的列
left_index左侧DataFrame行索引作为连接键
right_index右侧DataFrame行索引作为连接键
sort合并后对数据进行排序,默认True
suffiex合并后对重复数据进行重命名
#merge默认合并
from IPython.core.display import display
price = pd.DataFrame({'fruit':['apple','grape','orange','orange'],
'price':[8,7,9,11]})
amount = pd.DataFrame({'fruit':['apple','grape','orange'],'amout':[5,11,8]})
display(price,amount,pd.merge(price,amount))
》》》》》》结果:
fruit	price
0	apple	8
1	grape	7
2	orange	9
3	orange	11
fruit	amout
0	apple	5
1	grape	11
2	orange	8
fruit	price	amout
0	apple	8	5
1	grape	7	11
2	orange	9	8
3	orange	11	8

两个df都是有fruit列的,默认按照该列合并,方式默认是inner内连接,返回交集,即 pd.merge(amount,price,on="fruit",how="inner")

pd.merge(price,amount,left_on='fruit', right_on='fruit',how='left')

也可以通过多个键连接

left = pd.DataFrame({'key1':[1,2,3,4], 'key2':['a','b','a','d'], 'value1':range(4) })
right = pd.DataFrame({'key1':[1,2,3], 'key2':['a','b','c'], 'value2':range(3) })
display(left, right, pd.merge(left, right , on=['key1','key2'], how='left'))

key1	key2	value1
0	1	a	0
1	2	b	1
2	3	a	2
3	4	d	3
key1	key2	value2
0	1	a	0
1	2	b	1
2	3	c	2
key1	key2	value1	value2
0	1	a	0	0.0
1	2	b	1	1.0
2	3	a	2	NaN
3	4	d	3	NaN

重复列名的处理:人为修改或者merger函数的参数suffixes

#inner内连接求交集
print(pd.merge(left, right, on='key1'))
print(pd.merge(left, right, on='key1', suffixes=('_left','_right')))
   key1 key2_x  value1 key2_y  value2
0     1      a       0      a       0
1     2      b       1      b       1
2     3      a       2      c       2
   key1 key2_left  value1 key2_right  value2
0     1         a       0          a       0
1     2         b       1          b       1
2     3         a       2          c       2
2.2concat数据连接

如果合并的数据之间没有连接键, 则使用pandasconcat方法。默认情况下会按行的方向堆叠数据;如果在列向上连接,设置axis=1即可。

#pandas 的concat方法连接没有连接键的数据 默认是连接外连接求并集 可以传入参数join='inner'实现内连接 join_axis指定使用索引顺序 axis=1在列向上连接
# concat连接Series
s1 = pd.Series([0,1], index=['a','b'])
s2 = pd.Series([2,3,4], index=['a','c','d'])
s3 = pd.Series([6,7], index=['e','f'])
print(pd.concat([s1, s2, s3]))

a    0
b    1
a    2
c    3
d    4
e    6
f    7
dtype: int64
#concat连接DataFrame
df1 = pd.DataFrame({'key1':[1,2,3,4], 'value1':['a','b','c','d']})
df2 = pd.DataFrame({'key1':[1,0,7,9], 'value2':['a','b','c','d']})
print(pd.concat([df1, df2],  axis=0))
print(pd.concat([df1,df2], axis=1))

   key1 value1 value2
0     1      a    NaN
1     2      b    NaN
2     3      c    NaN
3     4      d    NaN
0     1    NaN      a
1     0    NaN      b
2     7    NaN      c
3     9    NaN      d
   key1 value1  key1 value2
0     1      a     1      a
1     2      b     0      b
2     3      c     7      c
3     4      d     9      d
2.3combine_first合并数据

如果要合并的两个DF存在重复索引,则使用merger和concat都无法正确合并,此时用combine_first方法。

display(s6, s5)
s6.combine_first(s5)

	0	1
a	0	0
b	1	5
	0	1
a	0.0	0
b	1.0	5
f	NaN	5
g	NaN	6

	0	1
a	0.0	0.0
b	1.0	5.0
f	NaN	5.0
g	NaN	6.0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值