用pandas探索你的數據(五)-合并數據
在數據處理和分析中,數據的合并是一項關鍵任務。Pandas 提供了豐富的工具來處理不同來源的數據,并將它們合并成一個更大的數據集。在這篇文章中,我們將深入探討 Pandas 中兩個重要的數據合并函數:pd.concat() 和 pd.merge()。
首先,我們將通過一系列的步驟和示例來學習如何使用這些函數。然后,我們將深入解釋每個函數的詳細用法,包括參數和常見的用例。無論您是數據科學家、數據分析師還是對數據處理感興趣的任何人,這篇文章都將為您提供處理和合并數據的實用技能。
探索虛擬姓名數據

步驟1 導入必要的庫
# 運行以下代碼
import numpy as np
import pandas as pd
步驟2 按照如下的元數據內容創建數據框
# 運行以下代碼
raw_data_1 = {
'subject_id': ['1', '2', '3', '4', '5'],
'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']}
raw_data_2 = {
'subject_id': ['4', '5', '6', '7', '8'],
'first_name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'last_name': ['Bonder', 'Black', 'Balwner', 'Brice', 'Btisan']}
raw_data_3 = {
'subject_id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
'test_id': [51, 15, 15, 61, 16, 14, 15, 1, 61, 16]}
步驟3 將上述的數據框分別命名為data1, data2, data3
# 運行以下代碼
data1 = pd.DataFrame(raw_data_1, columns = ['subject_id', 'first_name', 'last_name'])
data2 = pd.DataFrame(raw_data_2, columns = ['subject_id', 'first_name', 'last_name'])
data3 = pd.DataFrame(raw_data_3, columns = ['subject_id','test_id'])
步驟4 將data1和data2兩個數據框按照行的維度進行合并,命名為all_data
# 運行以下代碼
all_data = pd.concat([data1, data2])
all_data
| subject_id | first_name | last_name | |
|---|---|---|---|
| 0 | 1 | Alex | Anderson |
| 1 | 2 | Amy | Ackerman |
| 2 | 3 | Allen | Ali |
| 3 | 4 | Alice | Aoni |
| 4 | 5 | Ayoung | Atiches |
| 0 | 4 | Billy | Bonder |
| 1 | 5 | Brian | Black |
| 2 | 6 | Bran | Balwner |
| 3 | 7 | Bryce | Brice |
| 4 | 8 | Betty | Btisan |
步驟5 將data1和data2兩個數據框按照列的維度進行合并,命名為all_data_col
# 運行以下代碼
all_data_col = pd.concat([data1, data2], axis = 1)
all_data_col
| subject_id | first_name | last_name | subject_id | first_name | last_name | |
|---|---|---|---|---|---|---|
| 0 | 1 | Alex | Anderson | 4 | Billy | Bonder |
| 1 | 2 | Amy | Ackerman | 5 | Brian | Black |
| 2 | 3 | Allen | Ali | 6 | Bran | Balwner |
| 3 | 4 | Alice | Aoni | 7 | Bryce | Brice |
| 4 | 5 | Ayoung | Atiches | 8 | Betty | Btisan |
步驟6 打印data3
# 運行以下代碼
data3
| subject_id | test_id | |
|---|---|---|
| 0 | 1 | 51 |
| 1 | 2 | 15 |
| 2 | 3 | 15 |
| 3 | 4 | 61 |
| 4 | 5 | 16 |
| 5 | 7 | 14 |
| 6 | 8 | 15 |
| 7 | 9 | 1 |
| 8 | 10 | 61 |
| 9 | 11 | 16 |
步驟7 按照subject_id的值對all_data和data3作合并
# 運行以下代碼
pd.merge(all_data, data3, on='subject_id')
| subject_id | first_name | last_name | test_id | |
|---|---|---|---|---|
| 0 | 1 | Alex | Anderson | 51 |
| 1 | 2 | Amy | Ackerman | 15 |
| 2 | 3 | Allen | Ali | 15 |
| 3 | 4 | Alice | Aoni | 61 |
| 4 | 4 | Billy | Bonder | 61 |
| 5 | 5 | Ayoung | Atiches | 16 |
| 6 | 5 | Brian | Black | 16 |
| 7 | 7 | Bryce | Brice | 14 |
| 8 | 8 | Betty | Btisan | 15 |
步驟8 對data1和data2按照subject_id作連接
# 運行以下代碼
pd.merge(data1, data2, on='subject_id', how='inner')
| subject_id | first_name_x | last_name_x | first_name_y | last_name_y | |
|---|---|---|---|---|---|
| 0 | 4 | Alice | Aoni | Billy | Bonder |
| 1 | 5 | Ayoung | Atiches | Brian | Black |
步驟9 找到 data1 和 data2 合并之后的所有匹配結果
# 運行以下代碼
pd.merge(data1, data2, on='subject_id', how='outer')
| subject_id | first_name_x | last_name_x | first_name_y | last_name_y | |
|---|---|---|---|---|---|
| 0 | 1 | Alex | Anderson | NaN | NaN |
| 1 | 2 | Amy | Ackerman | NaN | NaN |
| 2 | 3 | Allen | Ali | NaN | NaN |
| 3 | 4 | Alice | Aoni | Billy | Bonder |
| 4 | 5 | Ayoung | Atiches | Brian | Black |
| 5 | 6 | NaN | NaN | Bran | Balwner |
| 6 | 7 | NaN | NaN | Bryce | Brice |
| 7 | 8 | NaN | NaN | Betty | Btisan |
總結
總結:
在本練習中,我們使用Pandas進行了合并操作,主要涉及以下要點:
-
使用
pd.concat函數可以按行維度合并兩個數據框。例如,將data1和data2合并為all_data,使用pd.concat([data1, data2])。 -
使用
pd.concat函數的axis參數可以按列維度合并兩個數據框。例如,將data1和data2按列維度合并為all_data_col,使用pd.concat([data1, data2], axis=1)。 -
使用
pd.merge函數可以按照指定的列(如subject_id)對兩個數據框進行合并。例如,按照subject_id對all_data和data3合并,使用pd.merge(all_data, data3, on='subject_id')。 -
在合并操作中,可以使用
how參數指定合并的方式,包括inner(內連接,保留兩個數據框的交集)、outer(外連接,保留兩個數據框的并集)等。 -
合并操作可以幫助我們根據共享的列值將不同數據框中的信息整合在一起,從而進行更復雜的數據分析和處理。
pd.concat() 是 Pandas 中用于合并數據的函數之一,它通常用于按行或列方向將多個數據框連接在一起。以下是對 pd.concat() 函數的詳細解釋:
pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
參數說明:
objs:要合并的對象,通常是一個包含多個數據框的列表或元組。axis:指定合并的方向,可以是 0(默認,按行方向)或 1(按列方向)。join:指定合并時的連接方式,可以是'outer'(默認,取并集)或'inner'(取交集)。ignore_index:如果為True,則在合并時重置索引,默認為False,保留原始索引。keys:創建一個層次化索引,用于標識每個原始數據框的來源。levels:指定多層索引的級別名稱。names:為多層索引的級別指定名稱。verify_integrity:如果為True,則檢查合并后的數據是否唯一,如果有重復的索引,將引發異常,默認為False。sort:如果為True,則對合并后的數據進行排序,默認為False。copy:如果為True,則復制數據而不修改原始對象,默認為True。
pd.concat() 返回一個合并后的新數據框,不會修改原始數據框。
使用示例:
-
合并兩個數據框按行方向(默認方式):
result = pd.concat([df1, df2]) -
合并兩個數據框按列方向:
result = pd.concat([df1, df2], axis=1) -
創建多層索引:
result = pd.concat([df1, df2], keys=['df1', 'df2']) -
重置索引:
result = pd.concat([df1, df2], ignore_index=True)
pd.concat() 是一個非常有用的函數,用于在數據處理中將多個數據框合并在一起,以便進行分析和操作。
pd.merge() 是 Pandas 中用于合并數據的函數之一,它通常用于將兩個數據框(DataFrame)按照指定的列或索引進行連接操作。以下是對 pd.merge() 函數的詳細解釋:
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
參數說明:
left:左側的數據框(DataFrame)。right:右側的數據框(DataFrame)。how:連接方式,可選值有'left'(左連接,默認),'right'(右連接),'outer'(外連接),'inner'(內連接)。on:連接列名,如果左右兩側的數據框都有相同列名,可以使用這個參數指定列名進行連接。left_on:左側數據框的連接列名,用于指定左側數據框的連接列。right_on:右側數據框的連接列名,用于指定右側數據框的連接列。left_index:如果為True,則使用左側數據框的索引進行連接。right_index:如果為True,則使用右側數據框的索引進行連接。sort:如果為True,則在連接之前對數據進行排序,默認為False。suffixes:如果左右兩側數據框有相同列名,可以使用suffixes參數添加后綴以區分這些列,默認為('_x', '_y')。copy:如果為True,則復制數據而不修改原始對象,默認為True。indicator:如果為True,則在結果中添加一個特殊的列_merge,用于表示每行的合并方式,默認為False。validate:用于驗證連接操作的有效性,可選值有'one_to_one','one_to_many','many_to_one','many_to_many'。
pd.merge() 返回一個合并后的新數據框,不會修改原始數據框。
使用示例:
-
內連接兩個數據框,使用相同列名連接:
result = pd.merge(left_df, right_df, on='key_column', how='inner') -
左連接兩個數據框,指定左側數據框的連接列和右側數據框的連接列:
result = pd.merge(left_df, right_df, left_on='left_key', right_on='right_key', how='left') -
連接時使用左側數據框的索引:
result = pd.merge(left_df, right_df, left_index=True, right_on='key_column', how='inner') -
添加后綴以區分相同列名的列:
result = pd.merge(left_df, right_df, on='key_column', suffixes=('_left', '_right'))
pd.merge() 是一個強大的數據連接工具,可用于合并不同來源的數據,進行數據分析和處理。根據不同的連接需求,可以選擇不同的連接方式和參數。
本文由mdnice多平臺發布
浙公網安備 33010602011771號