圖解Pandas數據合併:concat、join、append

2021-12-17 Python當打之年
concat+join+append

在上一篇文章中介紹過pandas中最為常用的一個合併函數merge的使用,本文中介紹的是另外3個與合併操作相關的函數:

Pandas連載

本文是Pandas數據分析庫的第15篇,歡迎閱讀:


模擬數據

首先是模擬幾份不同的數據:

import pandas as pd
import numpy as np

concat

concat也是一個常用的合併函數,下面通過具體例子來介紹它的使用。

參數
pandas.concat(objs,  # 合併對象
              axis=0,   # 合併方向,默認是0縱軸方向
              join='outer', # 合併取的是交集inner還是併集outer
              ignore_index=False, # 合併之後索引是否重新
              keys=None, # 在行索引的方向上帶上原來數據的名字;主要是用於層次化索引,可以是任意的列表或者數組、元組數據或者列表數組
              levels=None, # 指定用作層次化索引各級別上的索引,如果是設置了keys
              names=None, # 行索引的名字,列表形式
              verify_integrity=False, # 檢查行索引是否重複;有則報錯
              sort=False, # 對非連接的軸進行排序
              copy=True   # 是否進行深拷貝
             )

默認情況

默認情況是直接在縱向上進行合併

axis

指定合併的方向

如果某個數據框中不存在,則會顯示為NaN:

參數ignore_index

是否保留原表索引,默認保留,為 True 會自動增加自然索引。

參數join

指定取得交集inner還是併集outer,默認是併集outer

df3和df4隻有地址這個欄位是相同的,所以保留了它,其他的捨棄:

參數keys

當我們設置了索引重排(ignore_index=True),keys參數就無效啦

參數name

指定每個層級索引的名字

我們可以檢查下df6的索引,發現是層級索引:

合併多個DataFrame

同時合併df1、df2、df5

pd.concat([pd.concat([df1,df2],axis=0,ignore_index=True),df5],axis=1)

分兩步來實現:先合併df1、df2,將得到的結果和df5合併

join 參數

來自官網的參數說明:

dataframe.join(other,  # 待合併的另一個數據框
        on=None,  # 連接的鍵
        how='left',   # 連接方式:『left』, 『right』, 『outer』, 『inner』 默認是left
        lsuffix='',  # 左邊(第一個)數據框相同鍵的後綴
        rsuffix='',  # 第二個數據框的鍵的後綴
        sort=False)  # 是否根據連接的鍵進行排序;默認False

模擬數據

為了解釋join的操作,再模擬下數據:

參數 lsuffix、rsuffix

功能是為了添加指定的後綴

如果不指定的話,會報錯:

參數how

how參數默認是left,保留左邊的全部欄位。右邊不存在的數據用NaN

改成right之後,保留右邊的全部數據:

可以在默認的參數結果中,name欄位被分成了name_left和name_right,如何進行欄位的合併呢???

合併兩個數據:

最後進行索引重置的功能:

還有一種更為簡便的方法:

合併多個DataFrame

利用join來實現多個DataFrame的合併:

如果我們想要用merge函數來實現呢?

使用how="outer",保留全部欄位的數據信息

append

字面意思是「追加」。向dataframe對象中添加新的行,如果添加的列名不在dataframe對象中,將會被當作新的列進行添加

參數
DataFrame.append(other, 
                 ignore_index=False, 
                 verify_integrity=False, 
                 sort=False)

參數解釋:

other:待合併的數據。可以是pandas中的DataFrame、series,或者是Python中的字典、列表這樣的數據結構ignore_index:是否忽略原來的索引,生成新的自然數索引verify_integrity:默認是False,如果值為True,創建相同的index則會拋出異常的錯誤sort:boolean,默認是None。如果self和other的列沒有對齊,則對列進行排序,並且屬性只在版本0.23.0中出現。模擬數據添加不同類型數據

1、Python字典

2、Series類型

3、最常用的DataFrame

默認合併

df12和df13默認合併的結果:

參數ignore_index

改變生成的索引值

參數verify_integrity

默認是False,如果值為True,創建相同的index則會拋出異常的錯誤

案例實戰

假設現在一個excel表中有3個sheet:訂單表、訂單商品表、商品信息表:

1、訂單表

2、訂單商品表

3、商品信息表

現在我們通過合併函數將3個sheet中的內容關聯起來:

import pandas as pd
import numpy as np

# 讀取訂單表中的內容
df1 = pd.read_excel("水果訂單商品信息3個表.xlsx",sheet_name=0)  # 第一個sheet的內容,索引從0開始
df1

#  讀取訂單商品表
df2 = pd.read_excel("水果訂單商品信息3個表.xlsx",sheet_name=1)

# 商品信息表
df3 = pd.read_excel("水果訂單商品信息3個表.xlsx",sheet_name="商品信息")  # 可以直接指定sheet的名字name,不通過索引
df3

第一步:訂單表和訂單商品表的合併

第二步:將上面的結果和商品信息表合併

當我們得到上面的結果後,就可以完成很多的需求,舉2個例子說明:

1、不同水果的銷量和訂單數:根據水果進行分組統計數量和訂單數

2、不同區域的水果銷售額和客戶數

總結

兩篇關於pandas數據合併的文章,詳細介紹了4個函數:merge、concat、join、append的使用;其中,merge和concat最為常用。它們可以是實現SQL中join的功能。不管是交集、併集、還是左右連接,甚至是全連接都是可以直接實現的。

上面的實戰案例數據是存放在一個Excel表中。在pandas中,我們可以從不同的來源:Excel、資料庫、本地文件夾等獲取來進行數據合併,方便後續實現我們的需求,希望本文對讀者有所幫助。

相關焦點

  • 玩轉Pandas,讓數據處理更easy系列5
    easy系列2)智能地帶標籤的切片,好玩的索引提取大數據集的子集(玩轉Pandas,讓數據處理更easy系列2 )自動數據對齊,完全可以不考慮行、列標籤,直接append list.(玩轉Pandas,讓數據處理更easy系列2)通俗易懂地在DataFrame結構上實現merge和join操作(merge操作見:玩轉Pandas,讓數據處理更easy系列3)善於處理missing data,如NaN, non-floating數據。 強大而靈活的分組功能,在數據集上實現分-應用-合的操作,達到整合和改變數據形狀的目的。
  • 十分鐘學習pandas!pandas常用操作總結!
    學習Python, 當然少不了pandas,pandas是python數據科學中的必備工具,熟練使用pandas是從sql boy/girl 跨越到一名優秀的數據分析師傅的必備技能。這篇pandas常用操作總結幫大家回顧下pandas的常用語法,尤其是我們分析數據時常用的方法。
  • 80行代碼自己動手寫一個表格拆分與合併小工具(文末附工具下載)
    表格拆分Python實現表格拆分的邏輯比較簡單,就是利用pandas分組然後將每組的數據單獨導出存表即可原表數據長這樣:表格合併Python實現表格合併的本質是 遍歷全部表格數據,然後採用concat方法進行數據合併Pandas學習筆記02-數據合併。
  • 手把手教你學python第三課:數據分析,學會使用​pandas大殺器
    開始之前你需要了解的今天主要介紹的就是做數據分析必不可少的一個包包,pandas,這裡給大家吐血安利youtube上的一系列視頻,是我自己覺得在市面上翻出來最實用的一套課,每個短片都控制在10分鐘之內,想要真正學好的可以大致看一看,如果想偷懶,可以直接看我的精華提煉版本,然後代碼也不用都記住,只要用的時候翻到我的帖子,然後全文搜索下,再ctrl C大法好粘貼過去,我把視頻裡面提到的方法全都匯總在下面了
  • 快速介紹Python數據分析庫pandas的基礎知識和代碼示例
    我創建了這個pandas函數的備忘單。這不是一個全面的列表,但包含了我在構建機器學習模型中最常用的函數。讓我們開始吧!>數據清理篩選、排序和分組統計數據首先,我們需要導入pandas開始:import pandas as pd導入數據
  • 別再用Pandas處理大數據了!現在你擁有更好的選擇
    Pandas並不具備多處理器,並且處理較大的數據集速度很慢。筆者消耗在等待Pandas讀取一堆文件或對其進行匯總計算上的時間太多太多了。最近,筆者發現了一個更好的工具可以更新數據處理管道,使這些CPU內核正常工作!筆者使用該工具進行繁重的數據處理,例如讀取包含10 G數據的多個文件,對其進行過濾並匯總。
  • 210809:Python.Pandas.DataFrame.基礎操作.1
    學習資料:騰訊課堂.貪心科技.十周成為數據分析師.周.第一階段.上原課連結:https://ke.qq.com/course/package/30758--Pandas是Python的外部包,若要使用,需先安裝。都說Python非常適合做數據分析,主要原因便是有很多Pandas這樣的完善、現成的數據分析包可以使用。
  • Python基礎 | 為什麼需要Pandas的DataFrame類型
    ,經常會使用到的一個庫,提供了非常豐富的數據類型和方法,以簡化對數據的處理和分析。首先大家可能想到的是list()類型,很快就會寫出下面的代碼:videos = []item = ['哪吒之魔童降世', 'http://www.videos.com', '9.9']videos.append(item)雖然能夠存儲這些數據,但是想要基於這些數據進行某些查找和修改操作
  • Pandas萬花筒:讓繪圖變得更美觀
    筆者常用 Pandas 的繪圖功能快速地執行一些可視的數據探索,但在介紹數據洞察時,我會使用「更美觀」的繪圖庫(如 Plotly 或 Bokeh )來重做可視化。自最新的 Pandas 版本0.25.3發布後,無需這樣做了,現在我們可以使用第三方可視化庫作為 Pandas 繪圖功能的後端。
  • PandaSQL:一個讓你能夠通過SQL語句進行pandas的操作的python包
    這篇文章將介紹一種在pandas的dataframe中使用SQL的python包,並且使用一個不等連結的查詢操作來介紹PandasSQL的使用方法。不等連接(Non-equi join)假設你必須連接兩個dataframe。其中一個顯示了我們對某些商品進行促銷的時間段。
  • python批量操作文件——改文件名,合併多文件內容
    批量操作在辦公中非常常見,比如對一個文件夾中的幾百張圖片重新命名,又比如將幾十個txt文件合併到一個txt中,這些都是重複性的工作。在python盛行的時代,何不讓幾行代碼替你做?省時省力效率高!3.os.path.join(path1[, path2[,...]]) 拼接多個路徑比如os.path.join("C:\\Users\\Administrator\\Desktop","data"),返回的路徑為C:\Users\Administrator\Desktop\data。
  • Pandas文本數據處理 | 輕鬆玩轉Pandas(4)
    前文回顧:Pandas缺失值處理 | 輕鬆玩轉Pandas(3)Pandas基本功能詳解 | 輕鬆玩轉Pandas(2)Pandas數據結構詳解 | 輕鬆玩轉Pandas(1)內容目錄1. 為什麼要用str屬性2.
  • Python基礎 | pandas.dataframe 專題使用指南
    3.刪除行或列——df.dropdf.drop(labels,axis=0,inplace=Flase)1.concconcat,concat([df1,df2,...]時,為了和平臺數據保持一致,需要使用相同的時間行索引,但時間數據操作複雜,而且涉及到節假日、非交易日等問題,直接建立比較困難,這裡介紹一種簡單的方法,快速獲得跟平臺數據一致的時間索引。
  • Pandas的介紹與基本使用
    1、什麼是Pandas當大家談論到數據分析時,提及最多的語言就是Python和SQL,而Python之所以適合做數據分析,就是因為他有很多強大的第三方庫來協助,pandas就是其中之一,它是基於Numpy構建的,正因pandas的出現,讓Python語言也成為使用最廣泛而且強大的數據分析環境之一。
  • 8979條數據驗證:防脫洗髮水是不是偽命題?!
    我實在不忍心數據君繼續循環下去。數據君義正言辭:「我聽說那些玩意兒沒什麼用啊!現在產品都喜歡打概念!」「沒有調查就沒有發言權,你這樣下定論太主觀了。要不咱們從數據的角度來論證一下,防脫洗髮水是不是個偽命題?」「有點意思!」數據君來了勁兒。
  • Pandas必備技能之「時間序列數據處理」
    具體轉換的代碼如下,日期默認為本周的星期日,如果周期內數據不全,如 '20180722' 這周只有 3 行數據,也會按照上述方法進行轉換。繼續使用上面剛剛轉換好的周線數據,我們再試著把它轉換成日線數據。先通過 .resample('D').asfreq()【5】方法,將周線數據的頻率轉換成日線,效果如下。
  • 一個模版讓報表自動生成,領導:這才是數據分析人該幹的事
    利用sumif函數,將不同數據源的數據合併在一起,通過時間篩選器引用過來的日期控制顯示的日期行。根據這些合併好的數據,創建圖表放入「展現」裡,再美化一下,做成一個數據展現看板。、數值類型、數值大小等,但是這個過程需要一定pandas數據處理功底。
  • 多表連接的三種方式詳解 HASH JOIN、MERGE JOIN、NESTED LOOP
    HASH JOIN :散列連接是CBO 做大數據集連接時的常用方式,優化器使用兩個表中較小的表(或數據源)利用連接鍵在內存中建立散列表,然後掃描較大的表並探測散列表,找出與散列表匹配的行。這種方式適用於較小的表完全可以放於內存中的情況,這樣總成本就是訪問兩個表的成本之和。
  • 分析COCO數據集進行姿態估計
    在第14行,我們加載給定圖像的注釋元數據。這是一個字典列表,每個字典代表一個人。第27-32行顯示了如何加載整個訓練集(train_coco)。類似地,我們可以加載驗證集(val_coco)。將COCO轉換為Pandas數據幀讓我們將COCO元數據轉換為pandas數據幀。我們使用如matplotlib、sklearn 和pandas。
  • Pandas數據分析小技巧系列
    apple banana orange0123455.23.58.01567892.41.97.521011124.24.06.431314153.62.33.95.2 表示 12345 區域的 apple 價格,並且 apple, banana, orange,這三列都是一種水果,那麼如何把這三列合併為一列