如何在合并Pandas中的两个数据帧时“模糊”匹配字符串

2024-04-29 19:38:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧df1df2

df1 = pd.DataFrame ({'Name': ['Adam Smith', 'Anne Kim', 'John Weber', 'Ian Ford'],
                     'Age': [43, 21, 55, 24]})
df2 = pd.DataFrame ({'Name': ['adam Smith', 'Annie Kim', 'John  Weber', 'Ian Ford'],
                     'gender': ['M', 'F', 'M', 'M']})

我需要使用列Name上的pandas.merge连接这两个数据帧。但是,正如您所注意到的,两个数据帧的Name列之间有一些细微的差异。让我们假设他们是同一个人。如果我只是这样做:

pd.merge(df1, df2, how='inner', on='Name')

我只得到了一个只有一行的数据帧,那就是‘伊恩·福特’

有人知道如何合并这两个数据帧吗?如果我们在一个字符串列上连接两个表,我想这是非常常见的情况。我完全不知道如何处理这件事。先谢谢你


Tags: 数据namedataframemergejohnpddf1smith
2条回答

我在这里使用fuzzywuzzy

from fuzzywuzzy import fuzz
from fuzzywuzzy import process



df2['key']=df2.Name.apply(lambda x : [process.extract(x, df1.Name, limit=1)][0][0][0])

df2.merge(df1,left_on='key',right_on='Name')
Out[1238]: 
        Name_x gender         key  Age      Name_y
0   adam Smith      M  Adam Smith   43  Adam Smith
1    Annie Kim      F    Anne Kim   21    Anne Kim
2  John  Weber      M  John Weber   55  John Weber
3     Ian Ford      M    Ian Ford   24    Ian Ford

不确定模糊匹配是否是您要寻找的。也许每个名字都是一个合适的名字

df1.Name = df1.Name.apply(lambda x: x.title())
df2.Name = df2.Name.apply(lambda x: x.title())

pd.merge(df1, df2, how='inner', on='Name')

相关问题 更多 >