如何使用Merge连接Pandas数据框架

  • Post category:Python

使用Merge连接Pandas数据框架可以实现在不同数据框之间进行数据的关联和合并,合并后可用于数据分析和处理。下面是具体操作步骤和实例说明:

1. 准备数据

首先需要准备要合并的数据,这里假设有两个数据表,一个叫做orders,包含订单信息,如订单ID,用户ID,下单时间等;另一个叫做users,包含用户信息,如用户ID,用户名,邮件地址等。

import pandas as pd

orders = pd.DataFrame({
    'order_id': [100, 101, 102, 103],
    'user_id': [1, 2, 2, 3],
    'order_date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04']
})

users = pd.DataFrame({
    'user_id': [1, 2, 3],
    'user_name': ['Alice', 'Bob', 'Chris'],
    'email': ['alice@gmail.com', 'bob@gmail.com', 'chris@gmail.com']
})

2. 使用merge合并数据

使用merge方法可以合并数据表,进行数据关联和合并。

下面是合并两个数据表的例子,使用user_id作为关联字段:

merged = pd.merge(orders, users, on='user_id')
print(merged)

输出结果为:

   order_id  user_id  order_date user_name             email
0       100        1  2021-01-01     Alice  alice@gmail.com
1       101        2  2021-01-02       Bob    bob@gmail.com
2       102        2  2021-01-03       Bob    bob@gmail.com
3       103        3  2021-01-04     Chris  chris@gmail.com

可以发现,通过使用merge方法,将orders和users两个DataFrame按照user_id的值进行了关联和合并,得到了一个新的DataFrame merged。

3. 合并方法

在使用merge方法时,还可以指定不同的合并方法。合并方法有四种,包括innerouterleftright

  • inner:只合并两个表都有的行,即取两个表的交集。
  • outer:合并两个表所有的行,如果某个表没有对应的行,则用NaN填充。
  • left:以左边的表为基准,从左边表中取出所有行,然后与右边表进行合并,右边表中没有对应的行则用NaN填充。
  • right:以右边的表为基准,从右边表中取出所有行,然后与左边表进行合并,左边表中没有对应的行则用NaN填充。

下面是对比不同合并方法的例子:

# inner合并
merged_inner = pd.merge(orders, users, on='user_id', how='inner')
print(merged_inner)

# outer合并
merged_outer = pd.merge(orders, users, on='user_id', how='outer')
print(merged_outer)

# left合并
merged_left = pd.merge(orders, users, on='user_id', how='left')
print(merged_left)

# right合并
merged_right = pd.merge(orders, users, on='user_id', how='right')
print(merged_right)

输出结果为:

   order_id  user_id  order_date user_name             email
0       100        1  2021-01-01     Alice  alice@gmail.com
1       101        2  2021-01-02       Bob    bob@gmail.com
2       102        2  2021-01-03       Bob    bob@gmail.com
3       103        3  2021-01-04     Chris  chris@gmail.com

   order_id  user_id  order_date user_name             email
0     100.0        1  2021-01-01     Alice  alice@gmail.com
1     101.0        2  2021-01-02       Bob    bob@gmail.com
2     102.0        2  2021-01-03       Bob    bob@gmail.com
3     103.0        3  2021-01-04     Chris  chris@gmail.com
4       NaN        4         NaN      NaN    david@gmail.com

   order_id  user_id  order_date user_name             email
0       100        1  2021-01-01     Alice  alice@gmail.com
1       101        2  2021-01-02       Bob    bob@gmail.com
2       102        2  2021-01-03       Bob    bob@gmail.com
3       103        3  2021-01-04     Chris  chris@gmail.com
4       104        4  2021-01-05      None              None

   order_id  user_id  order_date user_name             email
0       100        1  2021-01-01     Alice  alice@gmail.com
1       101        2  2021-01-02       Bob    bob@gmail.com
2       102        2  2021-01-03       Bob    bob@gmail.com
3       103        3  2021-01-04     Chris  chris@gmail.com
4       NaN        4         NaN    David   david@gmail.com

可以看到,不同的合并方法得到的结果不同。

4. 指定关联字段

merge方法默认根据两个DataFrame中相同的列名进行关联,但如果DataFrame中的关联字段名称不同,可以通过left_on和right_on参数分别指定左右DataFrame中的关联字段。下面是指定不同关联字段的例子:

orders_1 = pd.DataFrame({
    'order_id': [100, 101, 102, 103],
    'cust_id': [1, 2, 2, 3],
    'order_date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04']
})

users_1 = pd.DataFrame({
    'cust_id': [1, 2, 3],
    'user_name': ['Alice', 'Bob', 'Chris'],
    'email': ['alice@gmail.com', 'bob@gmail.com', 'chris@gmail.com']
})

merged_1 = pd.merge(orders_1, users_1, left_on='cust_id',right_on='cust_id')

print(merged_1)

输出结果为:

   order_id  cust_id  order_date user_name             email
0       100        1  2021-01-01     Alice  alice@gmail.com
1       101        2  2021-01-02       Bob    bob@gmail.com
2       102        2  2021-01-03       Bob    bob@gmail.com
3       103        3  2021-01-04     Chris  chris@gmail.com

可以看到,在指定了左右DataFrame的不同关联字段后,也能够成功合并两个DataFrame。

使用merge连接Pandas数据框架可以实现灵活的数据关联和合并,能够便捷地进行数据分析和处理。