使用 spacy 匹配来自不同数据帧的 2 列之间的部分值
match partial value between 2 columns from different dataframes using with spacy
我有两个数据框 df1 和 df2,如下所示:
Df1:
movie_name correct_id year
0 birdman N/A 2010
1 avengers: endgame N/A 2020
2 deadpool N/A 2013
3 bla 208-2020 N/A 2018
4 once upon deadpool N/A 2020
Df2:参考数据帧
movie_ref id
0 birdmans 19876
1 The bird King 20807
2 The avengers: endgame 13978
3 once upon a deadpool 49999
4 bla 207-2020 45678
5 bla 208 66097
预期结果:
movie_name correct_id year
0 birdman 19876 2010
1 avengers: endgame 13978 2020
2 deadpool N/A 2013
3 bla 208-2020 66097 2018
4 once upon deadpool 49999 2020
请问如何使用 spacy 基于部分字符串匹配合并两个数据帧?
注意: 电影的名字不完全一样/并且两个数据帧的长度不同。
您可以使用 difflib
库找到最接近的匹配项,然后您可以创建一个 mapping dict
来获取所需的值:
import difflib
df2.movie_ref = df2.movie_ref.apply(lambda x: difflib.get_close_matches(
x, df1.movie_name.values, n=1, cutoff=.6)).explode()
df1['correct_id'] = df1.movie_name.map(dict(df2.dropna().values))
输出:
movie_name correct_id year
0 birdman 19876.0 2010
1 avengers: endgame 13978.0 2020
2 deadpool NaN 2013
3 bla 208-2020 66097.0 2018
4 once upon deadpool 49999.0 2020
注意:根据您的要求更改cutoff
值。
我有两个数据框 df1 和 df2,如下所示:
Df1:
movie_name correct_id year
0 birdman N/A 2010
1 avengers: endgame N/A 2020
2 deadpool N/A 2013
3 bla 208-2020 N/A 2018
4 once upon deadpool N/A 2020
Df2:参考数据帧
movie_ref id
0 birdmans 19876
1 The bird King 20807
2 The avengers: endgame 13978
3 once upon a deadpool 49999
4 bla 207-2020 45678
5 bla 208 66097
预期结果:
movie_name correct_id year
0 birdman 19876 2010
1 avengers: endgame 13978 2020
2 deadpool N/A 2013
3 bla 208-2020 66097 2018
4 once upon deadpool 49999 2020
请问如何使用 spacy 基于部分字符串匹配合并两个数据帧?
注意: 电影的名字不完全一样/并且两个数据帧的长度不同。
您可以使用 difflib
库找到最接近的匹配项,然后您可以创建一个 mapping dict
来获取所需的值:
import difflib
df2.movie_ref = df2.movie_ref.apply(lambda x: difflib.get_close_matches(
x, df1.movie_name.values, n=1, cutoff=.6)).explode()
df1['correct_id'] = df1.movie_name.map(dict(df2.dropna().values))
输出:
movie_name correct_id year
0 birdman 19876.0 2010
1 avengers: endgame 13978.0 2020
2 deadpool NaN 2013
3 bla 208-2020 66097.0 2018
4 once upon deadpool 49999.0 2020
注意:根据您的要求更改cutoff
值。