📅  最后修改于: 2023-12-03 15:03:28.407000             🧑  作者: Mango
在数据分析领域,经常需要将不同来源的数据进行合并处理。Pandas中提供了多种join操作,本文将介绍它们的使用方法和使用场景。
假设我们有以下两个数据集:
import pandas as pd
orders = pd.DataFrame({'order_id': [1001, 1002, 1003, 1004],
'customer_id': [101, 102, 103, 104],
'order_date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04']})
customers = pd.DataFrame({'customer_id': [101, 102, 103, 104],
'customer_name': ['Alice', 'Bob', 'Charlie', 'David'],
'city': ['Shanghai', 'Beijing', 'Shenzhen', 'Guangzhou']})
其中orders
数据集记录了4个订单的信息,包括订单号、客户ID和下单日期。customers
数据集记录了4个客户的信息,包括客户ID、客户名和所在城市。
Inner Join返回两个数据集中匹配的行。比如,我们可以基于客户ID将orders
和customers
数据集进行Inner Join:
inner_join = pd.merge(orders, customers, how='inner', on='customer_id')
这里的how='inner'
表示要进行Inner Join,而on='customer_id'
表示基于客户ID进行匹配。结果如下:
order_id customer_id order_date customer_name city
0 1001 101 2021-01-01 Alice Shanghai
1 1002 102 2021-01-02 Bob Beijing
2 1003 103 2021-01-03 Charlie Shenzhen
3 1004 104 2021-01-04 David Guangzhou
这里的结果只包含了两个数据集中都存在的行,即所有订单都对应一个客户。
Outer Join返回两个数据集中所有行,没有匹配的行用NaN填充。比如,我们可以基于客户ID将orders
和customers
数据集进行Outer Join:
outer_join = pd.merge(orders, customers, how='outer', on='customer_id')
这里的how='outer'
表示要进行Outer Join。结果如下:
order_id customer_id order_date customer_name city
0 1001.0 101 2021-01-01 Alice Shanghai
1 1002.0 102 2021-01-02 Bob Beijing
2 1003.0 103 2021-01-03 Charlie Shenzhen
3 1004.0 104 2021-01-04 David Guangzhou
4 NaN 105 NaN Ellen Chengdu
这里的结果包含了所有行,包括只在orders
或customers
中出现的行,以及没有匹配的行,用NaN填充。
Left Join返回左边数据集中所有行,右边数据集中匹配的行。比如,我们可以基于客户ID将orders
和customers
数据集进行Left Join:
left_join = pd.merge(orders, customers, how='left', on='customer_id')
这里的how='left'
表示要进行Left Join。结果如下:
order_id customer_id order_date customer_name city
0 1001 101 2021-01-01 Alice Shanghai
1 1002 102 2021-01-02 Bob Beijing
2 1003 103 2021-01-03 Charlie Shenzhen
3 1004 104 2021-01-04 David Guangzhou
这里的结果只包含左边数据集中所有行,右边数据集中匹配的行,即所有订单都对应一个客户,没有匹配的行用NaN填充。
Right Join返回右边数据集中所有行,左边数据集中匹配的行。比如,我们可以基于客户ID将orders
和customers
数据集进行Right Join:
right_join = pd.merge(orders, customers, how='right', on='customer_id')
这里的how='right'
表示要进行Right Join。结果如下:
order_id customer_id order_date customer_name city
0 1001 101 2021-01-01 Alice Shanghai
1 1002 102 2021-01-02 Bob Beijing
2 1003 103 2021-01-03 Charlie Shenzhen
3 1004 104 2021-01-04 David Guangzhou
4 NaN 105 NaN Ellen Chengdu
这里的结果包含了右边数据集中所有行,左边数据集中匹配的行,以及没有匹配的行,用NaN填充。
Pandas提供了多种join操作,用于将不同来源的数据进行合并处理。根据不同的使用场景,我们可以选择合适的join操作。