Python 如何';模糊';在熊猫中合并两个数据帧时匹配字符串

Python 如何';模糊';在熊猫中合并两个数据帧时匹配字符串,python,pandas,Python,Pandas,我有两个数据帧df1和df2 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'],

我有两个数据帧
df1
df2

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连接这两个数据帧。然而,正如您所注意到的,两个dataframe的列
Name
之间有一些细微的差别。让我们假设他们是同一个人。如果我只是这样做:

pd.merge(df1, df2, how='inner', on='Name')
我只得到了一个只有一行的数据帧,那就是‘伊恩·福特’


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

我在这里使用的是
fuzzyfuzzy

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')

“安妮”对“安妮”,“约翰·韦伯”对“约翰·韦伯”怎么样?你怎么能认为安妮和安妮是一样的?谢谢!这就是我需要的。“process.extract(x,df1.Name,limit=1)][0][0][0]”在这里做什么?@zesla获得第一个匹配项,结果很奇怪,这是元组中的元组,这就是为什么我们需要[0][0][0]在这里。。不要担心ita follow-u问题,对于process.extract,过去有一个参数得分截止点,我认为这非常有用。似乎它已经不在那里了。你知道我该如何定义分数线吗?非常感谢你@Wen@zesla[score for found,score,matchrow in process.extract(x,df1.Name,limit=1)],您可以找到分数,这就是为什么我们需要[0][0][0],因为函数返回多个结果:-)我的意思是process.extract函数中的参数分数。它曾经在那里。我在谷歌上搜索到了它的一些用法。基本上,如果分数小于截止值,则返回nan。然而,当我检查函数参数时,它似乎不再存在了……@Wen