04-python-pandas-merge
4. Pandas高级教程之:Dataframe的合并
简介
Pandas提供了很多合并Series和Dataframe的强大的功能,通过这些功能可以方便的进行数据分析。本文将会详细讲解如何使用Pandas来合并Series和Dataframe。
使用concat
concat是最常用的合并DF的方法,先看下concat的定义:
pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None,
levels=None, names=None, verify_integrity=False, copy=True)看一下我们经常会用到的几个参数:
objs是Series或者Series的序列或者映射。
axis指定连接的轴。
join : {‘inner’, ‘outer’}, 连接方式,怎么处理其他轴的index,outer表示合并,inner表示交集。
ignore_index: 忽略原本的index值,使用0,1,… n-1来代替。
copy:是否进行拷贝。
keys:指定最外层的多层次结构的index。
我们先定义几个DF,然后看一下怎么使用concat把这几个DF连接起来:
df1,df2,df3定义了同样的列名和不同的index,然后将他们放在frames中构成了一个DF的list,将其作为参数传入concat就可以进行DF的合并。

举个多层级的例子:

使用keys可以指定frames中不同frames的key。
使用的时候,我们可以通过选择外部的key来返回特定的frame:
上面的例子连接的轴默认是0,也就是按行来进行连接,下面我们来看一个例子按列来进行连接,如果要按列来连接,可以指定axis=1:

默认的 join='outer',合并之后index不存在的地方会补全为NaN。
下面看一个join='inner'的情况:

join='inner' 只会选择index相同的进行展示。
如果合并之后,我们只想保存原来frame的index相关的数据,那么可以使用reindex:
或者这样:
看下结果:

可以合并DF和Series:

如果是多个Series,使用concat可以指定列名:
使用append
append可以看做是concat的简化版本,它沿着axis=0 进行concat:

如果append的两个 DF的列是不一样的会自动补全NaN:

如果设置ignore_index=True,可以忽略原来的index,并重写分配index:

向DF append一个Series:

使用merge
和DF最类似的就是数据库的表格,可以使用merge来进行类似数据库操作的DF合并操作。
先看下merge的定义:
Left, right是要合并的两个DF 或者 Series。
on代表的是join的列或者index名。
left_on:左连接
right_on:右连接
left_index: 连接之后,选择使用左边的index或者column。
right_index:连接之后,选择使用右边的index或者column。
how:连接的方式,'left', 'right', 'outer', 'inner'. 默认 inner.
sort: 是否排序。
suffixes: 处理重复的列。
copy: 是否拷贝数据
先看一个简单merge的例子:

上面两个DF通过key来进行连接。
再看一个多个key连接的例子:

How 可以指定merge方式,和数据库一样,可以指定是内连接,外连接等:
left
LEFT OUTER JOIN
right
RIGHT OUTER JOIN
outer
FULL OUTER JOIN
inner
INNER JOIN

指定indicator=True ,可以表示具体行的连接方式:
如果传入字符串给indicator,会重命名indicator这一列的名字:
多个index进行合并:

支持多个列的合并:

使用join
join将两个不同index的DF合并成一个。可以看做是merge的简写。

可以指定how来指定连接方式:

默认join是按index来进行连接。
还可以按照列来进行连接:

单个index和多个index进行join:

列名重复的情况:

可以自定义重复列名的命名规则:

覆盖数据
有时候我们需要使用DF2的数据来填充DF1的数据,这时候可以使用combine_first:

或者使用update:
本文已收录于 www.flydean.com
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
最后更新于
这有帮助吗?