使用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方法时,还可以指定不同的合并方法。合并方法有四种,包括inner
、outer
、left
和right
。
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数据框架可以实现灵活的数据关联和合并,能够便捷地进行数据分析和处理。