超詳細教程|pandas合併之append和concat(下)

2021-01-09 CDA數據分析師

本篇文章主要介紹了pandas中對series和dataframe對象進行連接的方法:pd.append()和pd.concat(),文中通過示例代碼對這兩種方法進行了詳細的介紹,希望能對各位python小白的學習有所幫助。

上篇我們講了pd.append(),下篇我們繼續介紹pd.concat()

二、pd.concat([df_01,df_02])

描述:concat方法用以將兩個或多個pandas對象根據軸(橫向/縱向)進行拼接,concat函數是在pandas命名空間下的方法,因此需要通過pd.concat()的方式來引用。

語法:pd.concat(『objs』, 『axis=0』, 「join=『outer』」, 『join_axes=None』, 『ignore_index=False』, 『keys=None』, 『levels=None』, 『names=None』, 『verify_integrity=False』, 『sort=None』, 『copy=True』)

常用參數:

objs:要進行拼接的pandas對象,可用中括號[]將兩個或多個對象括起來axis:指定對象按照那個軸進行拼接,默認為0(縱向拼接),1為橫向橫向拼接join:拼接的方式,inner為交集,outer為併集join_axes:index的列表,僅在橫向合併時使用,指明要將數據合併入哪個原表的index。ignore_index:默認為False,如果設置為true,則無視表原來的軸標籤,直接合併,合併後生成新的軸標籤。keys:表標識的列表,用來區分合併的表來自哪裡。

下面,將對concat方法以上各個參數進行詳細說明:

第一個要學習的參數為objs:要進行拼接的pandas對象,可用中括號[]將兩個或多個對象括起來。

1)對series進行拼接

<<< ser1=pd.Series(np.arange(9))<<< ser2=pd.Series(np.arange(9))# 對兩個series對象進行拼接<<< pd.concat([ser1,ser2])001122334455667788001122334455667788dtype: int32

對DataFrame進行拼接

<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['A','B','C'],index=['a','b','c'])<<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['D','E','F'],index=['e','f','g'])# 對兩個DataFrame對象進行拼接<<< pd.concat([df1,df2]) A B C D E Fa 012 NaN NaN NaNb 345 NaN NaN NaNc 678 NaN NaN NaNe NaN NaN NaN 012f NaN NaN NaN 345g NaN NaN NaN 678

第二個要學習的參數為axis:指定對象按照那個軸進行拼接,默認為0(縱向拼接),1為橫向橫向拼接。

<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['A','B','C'],index=['a','b','c'])<<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['D','E','F'],index=['a','b','d'])# 將數據對象df1和df2沿1軸進行拼接,即進行橫向拼接<<< pd.concat([df1,df2],axis=1) A B C D E Fa 012012b 345345c 678 NaN NaN NaNd NaN NaN NaN 678

注意:當對Series進行拼接時,設置axis=0進行縱向拼接的結果對象為Series,設置axis=1進行橫向拼接的結果對象為DataFrame。

<<< ser1=pd.Series(np.arange(9))<<< ser2=pd.Series(np.arange(9))# 對Series進行拼接縱向拼接,結果認為Series對象<<< a=pd.concat([ser1,ser2],axis=0)<<<type(a)pandas.core.series.Series# 對Series進行拼接橫向拼接,結果轉換為DataFrame對象<<< b=pd.concat([ser1,ser2],axis=1)<<<type(b)pandas.core.frame.DataFrame

第三個要學習的參數為join:拼接的方式,inner為交集,outer為併集,橫向拼接時由index的交/併集決定,縱向拼接時由columns的交/併集決定,同時,如果join=outer,匹配不上的地方以nan填充。

<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['A','B','C'],index=['a','b','c'])<<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['D','E','F'],index=['a','b','d'])# 將df1和df2進行橫向合併,取二者的併集<<< pd.concat([df1,df2],axis=1) A B C D E Fa 012012b 345345c 678 NaN NaN NaNd NaN NaN NaN 678# 將df1和df2進行橫向合併,只取二者的交集<<< pd.concat([df1,df2],axis=1,join='inner') A B C D E Fa 012012b 345345

第四個要學習的參數為join_axes:以哪個數據對象的index/columns作為軸進行拼接,當進行橫向拼接時,join_axes為index的列表,如需根據df1對齊數據,則會保留df1的index,再將df2的數據進行拼接;同理,縱向拼接時為columns的列表。

<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['A','B','C'],index=['a','b','c'])<<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['D','E','F'],index=['a','b','d'])# 根據df1的index對齊數據<<< pd.concat([df1,df2],axis=1,join_axes=[df1.index]) A B C D E Fa 012012b 345345c 678 NaN NaN NaN# 根據df2的index對齊數據<<< pd.concat([df1,df2],axis=1,join_axes=[df2.index]) A B C D E Fa 012012b 345345d NaN NaN NaN 678

第五個要學習的參數為ignore_index:默認為False,如果設置為true,則無視表原來的軸標籤,直接合併,合併後生成新的軸標籤。

這裡需要注意的是,與append方法只能進行縱向拼接不同,concat方法既可以進行橫向拼接,也可以進行縱向拼接,若設置ignore_index=True,當進行橫向拼接時,則無視原表的columns,直接合併,合併後生成默認的columns;同理,當進行縱向拼接時,則是忽略原表的index,生成新的index。

<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['A','B','C'],index=['a','b','c'])<<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['D','E','F'],index=['a','b','d'])# 橫向拼接時,忽略的是columns,index仍起作用<<< pd.concat([df1,df2],axis=1,ignore_index=True)012345a 012012b 345345c 678 NaN NaN NaNd NaN NaN NaN 678# 縱向拼接時,忽略的是index,columns仍起作用pd.concat([df1,df2],axis=0,ignore_index=True)012345a 012012b 345345c 678 NaN NaN NaNd NaN NaN NaN 678

第六個要學習的參數為keys:表標識的列表,用來區分合併後的數據來源於哪個表,當ignore_index=True時,此參數的作用失效。

<<< df1=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['A','B','C'],index=['a','b','c'])<<< df2=pd.DataFrame(np.arange(9).reshape(3,3),columns=<<<['D','E','F'],index=['a','b','d'])# 設置ignore_index=True時,參數keys不起作用<<< pd.concat([df1,df2],axis=1,ignore_index=True,keys=<<<['df1','df2'])012345a 012012b 345345c 678 NaN NaN NaNd NaN NaN NaN 678# 設置ignore_index=False,會根據keys的列表標識結果中的數據來源<<< pd.concat([df1,df2],axis=1,ignore_index=False,keys=<<<['df1','df2']) df1 df2 A B C D E Fa 012012b 345345c 678 NaN NaN NaNd NaN NaN NaN 678

總結:

append方法只能進行橫向拼接,且只支持對兩個對象進行拼接操作,但append支持單個對象的連接,此方法常用於循環中;concat方法可用於橫向或縱向的拼接,同時可以設置以併集或交集的方式拼接

如對append和concat方法還感興趣,建議可前往查看官方文檔:

1)https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.append.html?highlight=append#pandas.DataFrame.append

2)pandas.concat - pandas 0.21.0 documentation

相關焦點

  • 超詳細教程|pandas合併之append和concat(上)
    本系列文章主要介紹了pandas中對series和dataframe對象進行連接的方法:pd.append()和pd.concat(),文中通過示例代碼對這兩種方法進行了詳細的介紹,希望能對各位python小白的學習有所幫助。
  • 第5章 精通pandas合併操作(使用pandas進行數據分析,)
    2. join函數第5章 合併import numpy as npimport pandas as pddf = pd.read_csv('data/table.csv')df.head()一、append與assign1. append方法(a)利用序列添加行(必須指定name)
  • 如果你也基於pandas做數據分析,分享這幾個提高效率的小知識點
    本文基於數據分析庫pandas,分享我在工作中常常需要使用的幾個關於數據定位的常用語法以及幾個小知識點。01loc和iloc目前pandas的版本已經取消了ix和at等語法,推薦使用的是loc和iloc這兩種語法定位數據loc是location的縮寫,iloc是index_location的縮寫,前者是基於標籤(標籤是指通過列名或者索引名定位數據),後者是基於索引
  • 超全的pandas數據分析常用函數總結(下篇)
    用merge合併DataFrame.merge(self,right,how =『inner』,on = None)right指要合併的對象on指要加入的列或索引級別名稱,必須在兩個DataFrame中都可以找到。
  • pandas庫中最重要的幾個知識點
    前言本篇是【機器學習與數據挖掘】頭條號原創首發Python數據分析系列文章的第四篇Python數據分析系列文章之Python基礎篇Python數據分析系列文章之NumpyPython數據分析系列文章之Pandas(上)Python數據分析系列文章之Pandas(下)Python數據分析系列文章之ScipyPython數據分析系列文章之MatplotlibPython
  • 懂Excel就能輕鬆入門Python數據分析包pandas(十六):合併數據
    後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas前言本系列上一節說了拆分數據的案例,這次自然是說下怎麼合併數據。3個包:pandas 不用多說from pathlib import Path ,用於獲取文件夾中文件的路徑openpyxl 用於讀取 Excel 文件所有的工作表我們來看看如何用pandas完成需求:Path('案例1').glob('*.xlsx') ,獲得指定文件夾(案例1)中的所有 Excel 文件路徑pd.read_excel(f) ,加載 Excel 數據pd.concat
  • 6個提升效率的pandas小技巧
    pandas是python中常用的數據分析庫,出現頻率非常高,而且pandas功能之多讓人咋舌,即使pandas老手也沒法保證能高效使用pandas做數據分析。這篇文章目的梳理幾個高效實用的pandas小技巧,供大家參考。1.
  • MySQL教程之concat以及group_concat的用法
    本文中使用的例子均在下面的資料庫表tt2下執行:一、concat()函數1、功能:將多個字符串連接成一個字符串。2、語法:concat(str1, str2,...)返回結果為連接參數產生的字符串,如果有任何一個參數為null,則返回值為null。
  • python數據軸向連接:6種pandas方法及示例教你玩轉軸向連接
    除了Numpy,python中最為豐富且靈活,應用最為便捷且廣泛的數據軸向連接函數是pandas 中的concat()函數。豐富的concat()函數參數,讓其支持的應用場景足夠滿足實際需求。我們將會在下文中進行詳細介紹。
  • nginx中使用nginx-http-concat模塊合併靜態資源文件
    西崑雲這篇文章主要介紹了nginx中使用nginx-http-concat模塊合併靜態資源文件,用以加速網站的CSS、JS等靜態資源載入速度,需要的朋友可以參考下  首先了解一下 nginx-http-concat
  • 帶你領略pandas中多表之間如何處理
    創建3個DataFrame表格查看一下三個表的數據將表格通過concat()方法進行合併Concat參數如下Objs(必須參數)參與連接的pandas對象的列表或字典Axis指名連接的軸向,默認為0Join選中inner或outer(默認),其他軸向上索引是按交集(inner
  • 對於merge、join和concat三者的區別分析
    1、從合併的方式看merge和join是一樣的,有left/right/inner/outer,而concat只有inner/outer兩種,因為merge和join參與合併的對象有左右區分,而concat第一個參數是多個dataframe組成的列表,沒有嚴格的左右區分,如果排除最後結果中列的順序的話,可以看成是一樣的。
  • 未明學院:7張思維導圖掌握數據分析關鍵庫pandas
    原創: 未明學院Pandas是一個強大的分析結構化數據的工具集;它基於numpy,用於數據分析和數據挖掘,同時也提供數據清洗功能。pandas與numpy一起構成了數據分析的基礎雙生庫。今天小明邀請了未明的王老師,給大家總結了pandas的核心知識,主要包括以下幾個方面。pandas核心知識01、首先我們來認識一下pandas的一些基本概念。pandas概述02在使用pandas做數據分析的時候往往第一步就是將數據導入進來,比如csv或者excel格式的數據,下面這張圖就是我們讀取數據時候的方法和參數。
  • PANDAS: 新手教程 一
    我建議你從Github下載數據和notebook,將其複製到你的環境中:https://github.com/ankitgoel1602/data-science/tree/master/data-analysis/pandas有關數據的更多詳細信息,請參閱Kaggle:https://www.kaggle.com/c/titanic/data?select=train.csv。
  • 一篇文章帶你查看並處理Pandas數據
    1、查看最大值查看眾英雄中年齡最大的是多少歲,三種方式都可以查看第一種是使用np.max()對info表中的年齡列進行操作第二種是使用np.max()對info表下的年齡進行操作第三種是info表下的年齡進行max()查找2、查看均值查看眾英雄年齡的均值類似的可以通過調用min、mean、
  • 用Python做數據分析:Pandas常用數據查詢語法
    在使用Pandas之前,大多數數據分析師已經掌握了Excel和SQL,並且在剛上手Pandas時會經常習慣性想到「老辦法」。"
  • 教程| pandas輕鬆入門 之 數據結構介紹 1
    訪問flyai.club,一鍵創建你的人工智慧項目Pandas含有使數據清洗和分析工作變得更快更簡單的數據結構和操作工具。pandas經常和其它工具一同使用,如數值計算工具NumPy和SciPy,分析庫statsmodels和scikit-learn,和數據可視化庫matplotlib。
  • 懂Excel就能輕鬆入門Python數據分析包pandas(七):分列
    後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas前言今天從兩個需求來看看數據分列功能,由於 Excel 自帶功能比較弱,在處理稍微複雜的需求時會顯得力不從心,因此,本系列文章將引入 Excel 中一個非常高效的數據處理插件—— Power Query,並且看看 pandas 是怎樣靈活解決。
  • 使用Pandas的resample函數處理時間序列數據的技巧
    下採樣並執行聚合使用自定義基數進行下採樣上採樣和填充值一個實際的例子向下採樣和執行聚合下採樣是將一個時間序列數據集重新採樣到一個更大的時間框架。例如,從幾分鐘到幾小時,從幾天到幾年。結果的行數將減少,並且可以使用mean()、min()、max()、sum()等聚合值。讓我們通過一個示例來了解它是如何工作的。
  • 使用pandas和openpyxl處理複雜Excel數據
    關於Excel數據處理,很多同學可能使用過Pyhton的pandas模塊,用它可以輕鬆地讀取和轉換Excel數據。但是實際中Excel表格結構可能比較雜亂,數據會分散不同的工作表中,而且在表格中分布很亂,這種情況下啊直接使用pandas就會非常吃力。本文蟲蟲給大家介紹使用pandas和openpyxl讀取這樣的數據的方法。