您当前的位置:首页 > 计算机 > 编程开发 > Python

一文详解 Python 拼接函数concat、merge参数详解(附代码操作展示)

时间:08-05来源:作者:点击数:
CDSY,CDSY.XYZ

DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示

创建演示DataFrame

data = {'name': ['user1', 'user2', 'user3', 'user4', 'user5'],
        'old': [21, 18, 22, 28, 26],
        'weight': [124, 124, 102,107,121]
        }
test_DataFrame1= pd.DataFrame(data)
test_DataFrame1
data = {'name': ['user1', 'user3', 'user5', 'user6', 'user7'],
        'old': [21, 22, 26, 30, 31],
        'high': [171, 165, 180,175,159]
        }
test_DataFrame2= pd.DataFrame(data)
test_DataFrame2

合并函数

1.concat

其他语言中都有concat函数,在C语言中为字符串拼接,在SQL中也为字符串拼接,而在Pandas中相当于数据库中的全连接(Union all):沿着一条轴,将多个对象堆叠到一起,大家不要搞混了。与数据库不同的是,它不会去重,但是可以使用drop_duplicates方法达到去重的效果。

语法如下:

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

官网:pandas.concat

参数解释:

  • objs:Series,DataFrame或Panel对象的序列或映射,也就是连接的两个对象。
  • axis:默认为0,0为行拼接,1为列拼接,意为沿着连接的轴。
  • join:{‘inner’,‘outer’},默认为“outer”。如何处理其他轴上的索引。outer为并集和inner为交集。
  • ignore_index:boolean,default False。如果为True,不使用合并后的索引值。结果轴将被标记为0,…,n-1。其他轴上的索引值在连接中仍然存在。
  • join_axes:Index对象列表。用于其他n-1轴的特定索引,而不是执行内部/外部设置逻辑。
  • keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引应为元组。
  • levels:序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键推断。
  • names:list,默认值无。结果层次索引中的级别的名称。
  • verify_integrity:boolean,default False。检查新连接的轴是否包含重复项。
  • copy:boolean,默认值True。如果为False,请勿不必要地复制数据。

直接使用concat不加参数时为:

pd.concat([test_DataFrame1,test_DataFrame2])

此时axis默认为0则为行连接,该为axis为1时:

pd.concat([test_DataFrame1,test_DataFrame2],axis=1)

行数不变列增加。改变join为交集时仅与有相同列合并其他删除:

pd.concat([test_DataFrame1,test_DataFrame2],axis=0,join='inner')

同理axis为1时也一样仅看行索引是否相同

pd.concat([test_DataFrame1,test_DataFrame2],axis=1,join='inner')

新版本的pandas已经删除了join_axes,这一功能可以用merge代替。

而ignore_index就是把索引index对应替换掉:

pd.concat([test_DataFrame1,test_DataFrame2],axis=0,join='outer',ignore_index=True)

2.merge

merge更像是SQL关系数据库那样根据表中相应的键来连接数据库,类似join。

语法如下:

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)

官网:pandas.merge

参数说明:

  • left:参与合并的左侧DataFrame
  • right:参与合并的右侧DataFrame
  • how:{inner、outer、left、right}default为inner为交集。
  • on:用于连接的列名。该列名就像连接的两张表中共同的特征。类似按键合并多表。如果未制定,且其他连接键也没用制定,则以left和right列名的交集为连接键,也就是inner连接。
  • left_on:左侧DataFrame中用作连接键的列
  • right_on:右则DataFrame中用作连接键的列
  • left_index:使用左则DataFrame中的行索引做为连接键
  • right_index:使用右则DataFrame中的行索引做为连接键
  • sort:默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能
  • suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(‘_x’,‘_y’)。如果两个DataFrame对象都有“Data”,则结果中就会出现“Data_x”和"Data_y“
  • copy:默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能
  • indicator:显示合并数据中数据的来源情况

仍然是之前两个DataFrame,默认效果为:

pd.merge(test_DataFrame1,test_DataFrame2)

该为交集则根据index合并,若没有的索引值则会自动NaN填补:

pd.merge(test_DataFrame1,test_DataFrame2,how='outer')

若想指定特定列名进行索引,则需要on函数:

pd.merge(test_DataFrame1,test_DataFrame2,how='outer',on='name')

如果两个DataFrame对象都有“old”,则结果中就会出现“old_x”和"old_y“

若是两表中列名不一样,如创建一个DataFrame3:

想要和DataFrame1合并时可以使用left_on和right_on:

pd.merge(test_DataFrame1,test_DataFrame3,how='outer',left_on=['name'],right_on=['user'])

行就不展示了效果一样,sort排序:

pd.merge(test_DataFrame1,test_DataFrame2,how='outer',sort=True)
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐