天天看點

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:

最通俗的解讀,最深刻的幹貨,最簡潔的教程,衆多你不知道的小技巧等你來發現! 公衆号:「程式那些事」,懂技術,更懂你!