如何在 pandas 中进行模糊匹配(附示例)
通常,您可能希望基于不完全匹配的字符串在 pandas 中将两个数据集连接在一起。这称为模糊匹配。
在 pandas 中执行模糊匹配的最简单方法是使用difflib包中的get_close_matches()函数。
下面的例子展示了如何在实际中使用这个功能。
示例:pandas 中的模糊对应
假设我们有以下两个 panda DataFrame,其中包含有关各个篮球队的信息:
import pandas as pd
#create two DataFrames
df1 = pd. DataFrame ({' team ': ['Mavericks', 'Nets', 'Warriors', 'Heat', 'Lakers'],
' points ': [99, 90, 104, 117, 100]})
df2 = pd. DataFrame ({' team ': ['Mavricks', 'Warrors', 'Heat', 'Netts', 'Lakes'],
' assists ': [22, 29, 17, 40, 32]})
#view DataFrames
print (df1)
team points
0 Mavericks 99
1 Nets 90
2 Warriors 104
3 Heat 117
4 Lakers 100
print (df2)
team assists
0 Mavricks 22
1 Warriors 29
2 Heat 17
3 Netts 40
4 Lakes 32
现在假设我们要基于Team列合并两个 DataFrame。
由于两个 DataFrame 之间的团队名称略有不同,因此我们需要使用模糊匹配来查找最匹配的团队名称。
我们可以使用difflib包中的get_close_matches()函数来执行此操作:
import difflib
#create duplicate column to retain team name from df2
df2[' team_match '] = df2[' team ']
#convert team name in df2 to team name it most closely matches in df1
df2[' team '] = df2[' team ']. apply (lambda x: difflib. get_close_matches (x, df1[' team '])[ 0 ])
#merge the DataFrames into one
df3 = df1. merge (df2)
#view final DataFrame
print (df3)
team points assists team_match
0 Mavericks 99 22 Mavricks
1 Nets 90 40 Nets
2 Warriors 104 29 Warriors
3 Heat 117 17 Heat
4 Lakers 100 32 Lakes
结果是一个数据框,其中包含第一个 DataFrame 中的五个团队名称以及与第二个 DataFrame 最匹配的团队。
team_match列显示第二个 DataFrame 中与第一个 DataFrame 中的团队名称最匹配的团队名称。
注意#1 :默认情况下, get_close_matches()返回三个最接近的匹配项。然而,通过在 lambda 函数末尾使用[0] ,我们只能返回最接近的团队名称匹配。
注意#2:您可以在此处找到get_close_matches()函数的完整文档。
其他资源
以下教程解释了如何在 pandas 中执行其他常见任务:
如何跨多列合并 Pandas DataFrame
如何合并索引上的两个 Pandas DataFrame
Pandas 加入或合并:有什么区别?