我有两个数据框 df1 和 df2。两个数据帧都有一个带有电影名称的列。我正在尝试将 df1 中的 movie_name1 与 df2 中的 movie_name2 匹配。movie_name1 具有诸如 The Dark Knight Rises、Spider-Man 3 之类的值。movie_name2 具有诸如 The Dark Knight Rises 、 Spider-Man 3 之类的值。
我们看到movie_name1 中所有电影的末尾都有一个额外的字母。所以在匹配之前,我删除了帽子多余的字母,剥离了空间,然后计算了 fuzz.ratio。
这就是我执行操作的方式 -
import pandas as pd
from fuzzywuzzy import fuzz
df1['movie_name1'] = df1['movie_name1'].str.replace( 'Â',"")
df1['movie_name1'] = df1['movie_name1'].apply(lambda x: x.strip())
df1['movie_name1_first_letter'] = df1['movie_name1'].astype(str).str.slice(0,1)
df2['movie_name2_first_letter'] = df2['movie_name2'].astype(str).str.slice(0,1)
df_result = pd.merge(df1,mdf2, left_on='movie_name1_first_letter',right_on=
'movie_name2_first_letter')
df_result['Fuzz'] = df_result.apply(lambda x: fuzz.ratio(x['movie_name1'],
x['movie_name2']) , axis=1)
样本数据:
df1 = pd.DataFrame({'movie_name1': ['127 hoursÂ','The Dark Knight RisesÂ',
'SpiderManÂ']})
df2 = pd.DataFrame({'movie_name2': ['The Dark Knight Rises','SpiderMan','127 hours'
]})
样本结果:
movie_name1 movie_name2 Fuzz
127 hours 127 hours 90
即使我在计算 fuzz.ratio 之前执行上述操作,完全相同的字符串的 fuzz.ratio 值仍然不是 100。
我的分析表明,两个电影名称之间总是存在长度 2 的差异。例如:movie_name1 中“127 小时”的长度为 11,而 movie_name2 中同一部电影的长度为 9。所有电影都发生这种情况。
为什么会这样?是因为那个字母“A”吗?我能做些什么来摆脱这个问题?