天天看点

Pandas高级教程之:Dataframe的合并

简介

使用concat

使用append

使用merge

使用join

覆盖数据

pandas提供了很多合并series和dataframe的强大的功能,通过这些功能可以方便的进行数据分析。本文将会详细讲解如何使用pandas来合并series和dataframe。

concat是最常用的合并df的方法,先看下concat的定义:

看一下我们经常会用到的几个参数:

objs是series或者series的序列或者映射。

axis指定连接的轴。

<code>join</code> : {‘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的合并。

Pandas高级教程之:Dataframe的合并

举个多层级的例子:

Pandas高级教程之:Dataframe的合并

使用keys可以指定frames中不同frames的key。

使用的时候,我们可以通过选择外部的key来返回特定的frame:

上面的例子连接的轴默认是0,也就是按行来进行连接,下面我们来看一个例子按列来进行连接,如果要按列来连接,可以指定axis=1:

Pandas高级教程之:Dataframe的合并

默认的 <code>join='outer'</code>,合并之后index不存在的地方会补全为nan。

下面看一个join='inner’的情况:

Pandas高级教程之:Dataframe的合并

join=‘inner’ 只会选择index相同的进行展示。

如果合并之后,我们只想保存原来frame的index相关的数据,那么可以使用reindex:

或者这样:

看下结果:

Pandas高级教程之:Dataframe的合并

可以合并df和series:

Pandas高级教程之:Dataframe的合并

如果是多个series,使用concat可以指定列名:

append可以看做是concat的简化版本,它沿着<code>axis=0</code> 进行concat:

Pandas高级教程之:Dataframe的合并

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

Pandas高级教程之:Dataframe的合并

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

Pandas高级教程之:Dataframe的合并

向df append一个series:

Pandas高级教程之:Dataframe的合并

和df最类似的就是数据库的表格,可以使用merge来进行类似数据库操作的df合并操作。

先看下merge的定义:

left, right是要合并的两个df 或者 series。

on代表的是join的列或者index名。

left_on:左连接

<code>right_on</code>:右连接

<code>left_index</code>: 连接之后,选择使用左边的index或者column。

<code>right_index</code>:连接之后,选择使用右边的index或者column。

how:连接的方式,<code>'left'</code>, <code>'right'</code>, <code>'outer'</code>, <code>'inner'</code>. 默认 <code>inner</code>.

<code>sort</code>: 是否排序。

<code>suffixes</code>: 处理重复的列。

<code>copy</code>: 是否拷贝数据

先看一个简单merge的例子:

Pandas高级教程之:Dataframe的合并

上面两个df通过key来进行连接。

再看一个多个key连接的例子:

Pandas高级教程之:Dataframe的合并

how 可以指定merge方式,和数据库一样,可以指定是内连接,外连接等:

合并方法

sql 方法

<code>left</code>

<code>left outer join</code>

<code>right</code>

<code>right outer join</code>

<code>outer</code>

<code>full outer join</code>

<code>inner</code>

<code>inner join</code>

Pandas高级教程之:Dataframe的合并

指定indicator=true ,可以表示具体行的连接方式:

如果传入字符串给indicator,会重命名indicator这一列的名字:

多个index进行合并:

Pandas高级教程之:Dataframe的合并

支持多个列的合并:

Pandas高级教程之:Dataframe的合并

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

Pandas高级教程之:Dataframe的合并

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

Pandas高级教程之:Dataframe的合并

默认join是按index来进行连接。

还可以按照列来进行连接:

Pandas高级教程之:Dataframe的合并

单个index和多个index进行join:

Pandas高级教程之:Dataframe的合并

列名重复的情况:

Pandas高级教程之:Dataframe的合并

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

Pandas高级教程之:Dataframe的合并

有时候我们需要使用df2的数据来填充df1的数据,这时候可以使用combine_first:

Pandas高级教程之:Dataframe的合并

或者使用update:

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现! 公众号:「程序那些事」,懂技术,更懂你!