📜  pandas join 系列 - Python (1)

📅  最后修改于: 2023-12-03 15:03:28.407000             🧑  作者: Mango

pandas join 系列 - Python

在数据分析领域,经常需要将不同来源的数据进行合并处理。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

Inner Join返回两个数据集中匹配的行。比如,我们可以基于客户ID将orderscustomers数据集进行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

Outer Join返回两个数据集中所有行,没有匹配的行用NaN填充。比如,我们可以基于客户ID将orderscustomers数据集进行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

这里的结果包含了所有行,包括只在orderscustomers中出现的行,以及没有匹配的行,用NaN填充。

Left Join

Left Join返回左边数据集中所有行,右边数据集中匹配的行。比如,我们可以基于客户ID将orderscustomers数据集进行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

Right Join返回右边数据集中所有行,左边数据集中匹配的行。比如,我们可以基于客户ID将orderscustomers数据集进行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填充。

Conclusion

Pandas提供了多种join操作,用于将不同来源的数据进行合并处理。根据不同的使用场景,我们可以选择合适的join操作。