python - объединение при частичном сопоставлении строк с использованием SequenceMatcher

Проблема, с которой я имею дело, заключается в том, что я хочу объединить два фрейма данных на основе процентного сходства между строками строк, которые я вызываю с помощью pymssql. Я хочу получить комбинированный фрейм данных, который объединяет строки df2 и df1, только если процентное сходство выше, чем 0,7. Тем не менее, я получаю следующее сообщение об ошибке, если я запускаю код ниже:

> ValueError: Length of values does not match length of index. 

Я принял код ниже из аналогичного вопроса, найденного здесь: Использование difflib SequenceMatcher ratio для слияния в Pandas. Есть ли решение для этой ошибки? Заранее спасибо!

# Queries for two dfs 
df1 = pd.read_sql("""SOME SELECTION 1""", con = con)

df2 = pd.read_sql("""SOME SELECTION 2""", con = con)

# Make the article title to lower
df1["title1"] = df1.title1.str.lower()
df2["title2"] = df2.title2.str.lower()

# Use sequencematcher for percentage similarity between two strings
from difflib import SequenceMatcher
df1['merge_ti'] = df1['title1'] # We will use these as merge keys

# Loop to merge on similarity
for ti_gs in df1[['title1']].values:
    for ti_oi in df2[['title2']].values:
        if SequenceMatcher(None, ti_gs, ti_oi).ratio() > .7:
            df2[ti_oi,'merge_ti'] = ti_gs # creates a merge key in orcid

# Merge and write to csv
merged_df1_df2 = pd.merge(df1, df2, on = ['merge_ti'], how = 'inner')
merged_df1_df2.to_csv('merge_match.csv', sep='\t')

0 ответов

Другие вопросы по тегам