首页 > 解决方案 > 检查数据框中的行是否大致对应

问题描述

我有一个包含摩洛哥城市名称的数据框和另一个名称相似但编码不正确的数据框。这是第一个:

>>> df[['new_regiononame']].head()

    new_regiononame
0   Grand Casablanca-Settat
1   Fès-Meknès
2   Souss-Massa
3   Laayoune-Sakia El Hamra
4   Fès-Meknès

这是我想更改为第一个名称的另一个。至少他们知道一种正确阅读它的方法:

>>>X_train[['S02Q03A_Region']].head()

    S02Q03A_Region
10918   Fès-Meknès
1892    Rabat-Salé-Kénitra
6671    Casablanca-Settat
4837    Marrakech-Safi
6767    Casablanca-Settat

如何检查数据框中的行是否大致对应,如果是,则逐行重X_train命名df

到目前为止,我只知道如何提取其中的哪些行X_train具有完全相同的内容df

X_train['S02Q03A_Region'][X_train['S02Q03A_Region'].isin(df['new_regiononame'].unique())]

标签: python-3.xdataframenlp

解决方案


Levenshtein 距离可以在这里完成这项工作。

Levenshtein 距离通过计算将一个单词转换为另一个单词所需的单个字符编辑次数,为您提供两个单词之间的距离。您可以建立一个合理的阈值,将一个数据框列与另一列进行比较,例如:

  1. 如果它以相同的字符 (?)
  2. 如果城市名称的长度之间的差异仅是x字符?
  3. 如果 Levenshtein 距离小于y

等等等等

计算 Levenshtein 距离的代码是:

import nltk
nltk.edit_distance("Fès-Meknès", "Fès-Meknès")

输出:

4

推荐阅读