【问题标题】:match partial value between 2 columns from different dataframes using with spacy使用与 spacy 匹配来自不同数据帧的 2 列之间的部分值
【发布时间】:2021-06-13 23:43:20
【问题描述】:

我有两个数据框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 根据部分字符串匹配合并两个数据帧?

注意:电影名称不完全相同/且两个数据帧的长度不同。

【问题讨论】:

    标签: pandas dataframe spacy


    【解决方案1】:

    您可以使用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 的值。

    【讨论】:

    • Thks 但我需要使用 spacy。
    • 为什么需要使用 spaCy? spaCy 老实说不是最适合这种非常短的文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多