python DataFrame合并方法

这篇博客主要介绍了Python中DataFrame的merge方法,包括不同类型的合并方式如left、right、outer、inner,以及on、left_on、right_on、left_index、right_index等参数的用法。通过示例展示了如何使用merge方法进行数据合并,并解释了suffixes和sort参数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python 合并DataFrame方法

一、merge方法

DataFrame.merge(left,right, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(’_x’, 'y’), copy=True, indicator=False, validate=None)
参数含义:
1:left、right DataFrame或命名为Series
需要合并的DataFrame
2:how {‘left’,‘right’,‘outer’,‘inner’},默认’inner’
left:仅使用左DataFrame中的键,类似于SQL左外连接; 保留关键顺序。
right:仅使用右DataFrame中的键,类似于SQL右外连接; 保留关键顺序。
outer:使用来自两个DataFrame的键的并集,类似于SQL全外连接; 按字典顺序排序键。
inner:使用两个DataFrame的键交集,类似于SQL内连接; 保留左键的顺序。
3:on 标签或列表
以一列的字段作为合并基准唯一值
4:left_on、right_on 标签或列表,或类似数组
在左侧/右侧连接的列或者索引
5:left_index、right_index 标签或列表,或类似数组
以左侧或者右侧索引作为连接
6:sort bool,默认为False
在结果DataFrame中按字典顺序对连接键进行排序。如果为False,则连接键的顺序取决于连接类型(关键字 如何)
7:suffixes (str,str)的元组,默认(‘x’,’ y’)
合并后的DataFrame重复列名会加上_x’,’
y’后缀
例子1.默认直接合并的方法

import numpy as np
import pandas as pd
df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c'],'data1': range(4)})
df2 = pd.DataFrame({'key': ['a', 'b', 'd'],'data2': np.arange(5,8)})
df3=pd.merge(df1,df2)
print(df1,df2,df3)  #输出结果
df1
  key  data1
0   b      0
1   b      1
2   a      2
3   c      3

df2
  key  data2
0   a      5
1   b      6
2   d      7

df3
  key  data1  data2
0   b      0      6
1   b      1      6
2   a      2      5

2.how参数

df4=pd.merge(df1,df2,how='outer') #外链接 即全部数据都选中,无值则填充空值
df4
  key  data1  data2
0   b    0.0    6.0
1   b    1.0    6.0
2   a    2.0    5.0
3   c    3.0    NaN
4   d    NaN    7.0
df4=pd.merge(df1,df2,how='left')  #左连接
df4
  key  data1  data2
0   b      0    6.0
1   b      1    6.0
2   a      2    5.0
3   c      3    NaN

3.left_on,right_on参数

df_1 = pd.DataFrame({'key1': ['b', 'b', 'a', 'c'],'data1': range(4)})
df_2 = pd.DataFrame({'key2': ['a', 'b', 'd'],'data2': np.arange(5,8)})
df5=pd.merge(df_1,df_2,left_on='key1',right_on='key2') #类似于以左DataFrame的key1的值和右DataFramekey2的值做连接

df5
  key1  data1 key2  data2
0    b      0    b      6
1    b      1    b      6
2    a      2    a      5

4.left_index,right_index 以DataFrame索引做连接

left= pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'],'value': range(6)})
right =pd.DataFrame({'group_val': [3.5, 7]}, index=['a', 'b'])
df6=pd.merge(left, right, left_on='key', right_index=True) #以key和right的索引作为连接

left
  key  value
0   a      0
1   b      1
2   a      2
3   a      3
4   b      4
5   c      5

right
   group_val
a        3.5
b        7.0

df6
  key  value  group_val
0   a      0        3.5
2   a      2        3.5
3   a      3        3.5
1   b      1        7.0
4   b      4        7.0

5.suffixes和sort参数

left= pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'],'value': range(6)})
right =pd.DataFrame({'value': [3.5, 7]}, index=['a', 'b'])
df6=pd.merge(left, right, left_on='key', right_index=True,sort=False)

df6
  key  value_x  value_y
0   a        0      3.5
2   a        2      3.5
3   a        3      3.5
1   b        1      7.0
4   b        4      7.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值