我有两个数据帧df1和df2。两个数据框都有一个包含movie_names的列。我试图将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.这适用于所有电影。
为什么会这样?是因为那封信'''?我该怎么做才能解决这个问题?