Pandas使用concat进行数据连接与合并

您所在的位置:网站首页 python中concat函数添加新列 Pandas使用concat进行数据连接与合并

Pandas使用concat进行数据连接与合并

2024-07-14 20:50| 来源: 网络整理| 查看: 265

1、背景

谈到pandas数据的行更新、表合并等操作,一般用到的方法有concat、join、merge。但这三种方法对于很多新手来说,都不太好分清使用的场合与用途。今天就pandas官网中关于数据合并和重述的章节做个使用方法的总结。(文中代码块主要有pandas官网教程提供。)

2、concat的使用场景

在实际的使用中,我们也会用到将两组或者多组数据直接简单的合并,并不需要进行匹配,这时候就需要用到concat()函数了。

3、concat函数简介

concat函数是在pandas中的方法,可以将数据根据不同的轴作简单的融合。

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

参数说明

objs:Series,DataFrame或Panel对象的序列或映射。如果传递了dict,则排序的键将用作键参数,除非它被传递,在这种情况下,将选择值(见下文)。任何无对象将被静默删除,除非它们都是无,在这种情况下将引发一个ValueError。axis:{0,1,…},默认为0。沿着连接的轴。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,default无。结果层次索引中的级别的名称。verify_integrity:boolean,default False。检查新连接的轴是否包含重复项。这相对于实际的数据串联可能是非常昂贵的。copy:boolean,default True。如果为False,请勿不必要地复制数据。 4、concat功能详解

我们用以下案例详细说明concat函数的用法

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'], 'C': ['C4', 'C5', 'C6', 'C7'], 'D': ['D4', 'D5', 'D6', 'D7']}, index=[4, 5, 6, 7]) pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'], 'B': ['B8', 'B9', 'B10', 'B11'], 'C': ['C8', 'C9', 'C10', 'C11'], 'D': ['D8', 'D9', 'D10', 'D11']}, index=[8, 9, 10, 11]) # 现将表构成list,然后在作为concat的输入 frames = [df1, df2, df3] result = pd.concat(frames)

在这里插入图片描述 我们根据以上建立的数据结果针对不同情况进行concat功能的详解

4.1 相同字段的表首尾相接

要在相接的时候在加上一个层次的key来识别数据源自于哪张表,可以增加key参数

result = pd.concat(frames, keys=['x', 'y', 'z'])

在这里插入图片描述

4.2 横向表拼接(行对齐) 4.2.1 axis

当axis = 1的时候,concat就是行对齐,然后将不同列名称的两张表合并

result = pd.concat([df1, df4], axis=1)

在这里插入图片描述

4.2.2 join

加上join参数的属性,如果为’inner’得到的是两表的交集,如果是outer,得到的是两表的并集。

result = pd.concat([df1, df4], axis=1, join='inner')

在这里插入图片描述

4.2.3 join_axes

如果有join_axes的参数传入,可以指定根据那个轴来对齐数据 例如根据df1表对齐数据,就会保留指定的df1表的轴,然后将df4的表与之拼接

result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])

在这里插入图片描述

4.3 append

append是series和dataframe的方法,使用它就是默认沿着列进行凭借(axis = 0,列对齐)

result = df1.append(df2)

在这里插入图片描述

4.4 无视index的concat

如果两个表的index都没有实际含义,使用ignore_index参数,置true,合并的两个表就睡根据列字段对齐,然后合并。最后再重新整理一个新的index。

result = df1.append(df4, sort=False)

在这里插入图片描述

4.5 合并的同时增加区分数据组的键

前面提到的keys参数可以用来给合并后的表增加key来区分不同的表数据来源

4.5.1 可以直接用key参数实现 result = pd.concat(frames, keys=['x', 'y', 'z'])

在这里插入图片描述

4.5.2 传入字典来增加分组键 pieces = {'x': df1, 'y': df2, 'z': df3} result = pd.concat(pieces)

在这里插入图片描述

4.6 在dataframe中加入新的行

append方法可以将 series 和 字典就够的数据作为dataframe的新一行插入。

s2 = pd.Series(['X0', 'X1', 'X2', 'X3'], index=['A', 'B', 'C', 'D']) result = df1.append(s2, ignore_index=True)

在这里插入图片描述

4.7 表格列字段不同的表合并

如果遇到两张表的列字段本来就不一样,但又想将两个表合并,其中无效的值用nan来表示。那么可以使用ignore_index来实现。

dicts = [{'A': 1, 'B': 2, 'C': 3, 'X': 4}, {'A': 5, 'B': 6, 'C': 7, 'Y': 8}] result = df1.append(dicts, ignore_index=True, sort=False)

在这里插入图片描述

总结

以上就是concat函数的常用功能详解,之后的内容我将继续介绍pandas中其他进行数据合并的方法模块——join & merge



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3