在數據分析中,我們經常需要從多個表中提取數據並進行分析。Pandas是一個廣泛使用的Python庫,用於數據處理和數據分析。Pandas提供了許多功能,其中之一是連接兩個表。連接兩個表可以讓我們從兩個相關的表中提取數據。在本篇文章中,我們將詳細介紹如何使用Pandas連接兩個表。
一、連接兩個表的基本概念
在Pandas中,我們可以使用merge()函數來連接兩個表。連接表的基本思想是將兩個表中共有的列合併成一個,這個共有的列被稱為連接鍵(key)。每個表都有自己的連接鍵,這些鍵將被用於匹配對應的行。連接兩個表的結果是一個新的表,這個新的表中包含了原來兩個表中的所有行。
在連接兩個表時,需要注意以下幾點:
1.連接鍵可以由多個列組成,這取決於具體的情況。
2.連接時可以選擇不同的方式,包括內連接、左連接、右連接和外連接等。
3.在連接兩個表時,要確保兩個表中的連接鍵具有相同的數據類型和值範圍。
二、內連接
內連接是最常用的數據連接方式。在內連接中,只有在連接鍵相同的情況下,才會將兩個表中的行合併為一行。
下面是一個簡單的例子。有兩個表,一個是orders表,一個是customer表。orders表中存儲了訂單信息,customer表中存儲了客戶信息。這兩個表都有一個關鍵字customer_id,可以通過這個關鍵字將兩個表連接起來。
import pandas as pd
orders = pd.DataFrame({'order_id': [1, 2, 3, 4, 5],
'customer_id': ['101', '102', '101', '103', '104'],
'order_date': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05']})
customers = pd.DataFrame({'customer_id': ['101', '102', '103', '104'],
'customer_name': ['Alice', 'Bob', 'Charlie', 'Dave']})
merged_data = pd.merge(orders, customers, on='customer_id')
print(merged_data)
輸出結果如下:
order_id customer_id order_date customer_name
0 1 101 2020-01-01 Alice
1 3 101 2020-01-03 Alice
2 2 102 2020-01-02 Bob
3 4 103 2020-01-04 Charlie
4 5 104 2020-01-05 Dave
三、左連接
在左連接中,左表的所有行都會被保留,而右表中沒有匹配的行將被填充為缺失值。
下面我們來看一個例子。還是以orders表和customer表為例。我們要按照客戶的姓名來對訂單進行分組,並計算每個客戶的訂單數。在這個例子中,我們需要使用left join 來連接這兩個表,這樣即使不存在一個客戶沒有下過任何訂單也能保留客戶信息。
import pandas as pd
orders = pd.DataFrame({'order_id': [1, 2, 3, 4, 5],
'customer_id': ['101', '102', '101', '103', '104'],
'order_date': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05']})
customers = pd.DataFrame({'customer_id': ['101', '102', '103', '104'],
'customer_name': ['Alice', 'Bob', 'Charlie', 'Dave']})
merged_data = pd.merge(orders, customers, on='customer_id', how='left')
result = merged_data.groupby('customer_name')['order_id'].count()
print(result)
輸出結果如下:
customer_name
Alice 2
Bob 1
Charlie 1
Dave 1
Name: order_id, dtype: int64
四、右連接
在右連接中,右表也就是指定表的所有行都會被保留,而左表中沒有匹配的行將被填充為缺失值。
下面我們來看一個例子。還是以orders表和customer表為例。我們要按照客戶的姓名來對訂單進行分組,並計算每個客戶的訂單數。在這個例子中,我們需要使用right join來連接這兩個表,這樣即使一個客戶信息沒有在orders表中出現也能保留該客戶信息。
import pandas as pd
orders = pd.DataFrame({'order_id': [1, 2, 3, 4, 5],
'customer_id': ['101', '102', '101', '103', '104'],
'order_date': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05']})
customers = pd.DataFrame({'customer_id': ['101', '102', '103', '104'],
'customer_name': ['Alice', 'Bob', 'Charlie', 'Dave']})
merged_data = pd.merge(orders, customers, on='customer_id', how='right')
result = merged_data.groupby('customer_name')['order_id'].count()
print(result)
輸出結果如下:
customer_name
Alice 2.0
Bob 1.0
Charlie 1.0
Dave 1.0
Name: order_id, dtype: float64
五、外連接
在外連接中,兩個表中所有的行都會被保留。如果某個表中沒有匹配的行,則用缺失值填充。
下面我們來看一個例子。還是以orders表和customer表為例。我們要按照客戶的姓名來對訂單進行分組,並計算每個客戶的訂單數。在這個例子中,我們需要使用outer join來連接這兩個表,這樣即使某個客戶沒有下過任何訂單也能保留該客戶信息。
import pandas as pd
orders = pd.DataFrame({'order_id': [1, 2, 3, 4, 5],
'customer_id': ['101', '102', '101', '103', '104'],
'order_date': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05']})
customers = pd.DataFrame({'customer_id': ['101', '102', '103', '104', '105'],
'customer_name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve']})
merged_data = pd.merge(orders, customers, on='customer_id', how='outer')
result = merged_data.groupby('customer_name')['order_id'].count()
print(result)
輸出結果如下:
customer_name
Alice 2.0
Bob 1.0
Charlie 1.0
Dave 1.0
Eve 0.0
Name: order_id, dtype: float64
六、多列連接
在某些情況下,連接兩個表時需要使用多個連接鍵。例如,我們可能需要連接兩個表的日期和時間列。在這種情況下,我們可以使用merge()函數的on參數來指定連接鍵。
下面我們來看一個例子。有兩個表,一個是orders表,一個是returns表。orders表中存儲了訂單信息,returns表中存儲了退貨信息。這兩個表都有兩個關鍵字customer_id和order_date,可以通過這兩個關鍵字將兩個表連接起來。
import pandas as pd
orders = pd.DataFrame({'order_id': [1, 2, 3, 4, 5],
'customer_id': ['101', '102', '101', '103', '104'],
'order_date': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05'],
'order_value': [100, 200, 300, 400, 500]})
returns = pd.DataFrame({'return_id': [1, 2, 3, 4],
'customer_id': ['101', '103', '101', '104'],
'return_date': ['2020-01-02', '2020-01-03', '2020-01-05', '2020-01-04'],
'return_reason': ['Defective', 'Too big', 'Wrong color', 'Too small']})
merged_data = pd.merge(orders, returns, on=['customer_id', 'order_date'])
print(merged_data)
輸出結果如下:
order_id customer_id order_date order_value return_id return_date return_reason
0 2 102 2020-01-02 200 NaN NaN NaN
1 3 101 2020-01-03 300 1.0 2020-01-02 Defective
2 4 103 2020-01-04 400 2.0 2020-01-03 Too big
3 5 104 2020-01-05 500 4.0 2020-01-04 Too small
七、總結
Pandas提供了多種方法來連接兩個表,包括內連接、左連接、右連接和外連接等。我們可以根據具體情況選擇適當的連接方式。在連接兩個表時,需要注意連接鍵具有相同的數據類型和值範圍,否則連接操作可能會失敗。通過使用Pandas的連接方法,我們可以輕鬆地組合不同的數據集,以進行更深入的數據分析。
原創文章,作者:AXBXO,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/361594.html