Pandas中左反连接(LEFT ANTI JOIN)是指只保留左侧DataFrame中没有与右侧DataFrame匹配的记录,并将剩下的结果作为输出。这与传统的“LEFT JOIN”连接方式不同,不会保留右侧DataFrame中的未匹配项。下面详细讲解如何在Pandas中进行LEFT ANTI连接的完整攻略。
1. 创建测试数据集
我们在开始讲解之前需要创建一个测试数据集,来展示LEFT ANTI JOIN操作的实际效果。我们可以通过以下代码来创建两个DataFrame,并将它们合并到一起。
import pandas as pd
# 创建 DataFrame
df1 = pd.DataFrame({'id': [1, 2, 3, 4, 5],
'name': ['John', 'Mike', 'Fred', 'Lisa', 'Ryan']})
df2 = pd.DataFrame({'id': [2, 4, 5],
'salary': [50000, 70000, 90000]})
#合并 DataFrame
df3 = pd.merge(df1, df2, on='id', how='left')
df3
这里我们使用了Pandas中的merge方法,将两个DataFrame按照id列进行左连接,并将结果保存为df3,从而得到以下输出:
id name salary
0 1 John NaN
1 2 Mike 50000.00
2 3 Fred NaN
3 4 Lisa 70000.00
4 5 Ryan 90000.00
2. 取出未匹配的部分
现在我们需要筛选出df3中未匹配的记录。具体来说,我们需要找到那些在df1中出现,但未出现在df2中的记录。我们可以通过以下代码来实现:
# 筛选未匹配的记录
df4 = df3[df3['salary'].isnull()]
df4
这里使用了DataFrame的isnull方法,选择了df3中那些salary列为空的记录,因为在左反连接中,仅当右侧DataFrame中找不到匹配项时,LEFT ANTI JOIN 才会保留左侧DataFrame中的记录。
最后,我们能得到以下输出结果:
id name salary
0 1 John NaN
2 3 Fred NaN
可以看到,我们成功地选择了那些未匹配的记录。
总结
在这篇文章中,我们通过一个实际例子详细讲解了如何在Pandas中进行LEFT ANTI连接。通过这样的连接操作,我们可以筛选出左侧DataFrame中未被右侧DataFrame匹配的记录。在实际工作中,LEFT ANTI JOIN操作可以用于筛选掉那些没有关联信息或者错误信息的数据。