根据拼写清理一列?熊猫

时间:2019-05-11 23:34:43

标签: python-3.x pandas pandas-groupby sklearn-pandas

我在数据框中有两个非常重要的,用户输入的信息列。除了一个问题:它们的大部分内容都得到了清理:拼写和名称的编写方式有所不同。例如,对于一个名称,我有五个条目:“红色岩石峡谷”,“ redrcks”,“ redrock峡谷”,“红色岩石峡谷”。该数据集太大,我无法手动进行清理(200万个条目)。有什么策略可以用代码清除这些功能?

Screen_shot_of_data

1 个答案:

答案 0 :(得分:1)

我会考虑在这里进行phonetic string matching。这种方法的基本思想是为每个输入的字符串获取语音编码,然后根据其编码对拼写变化进行分组。然后,您可以选择每个组中最频繁出现的变体形式来作为“正确”的拼写。

语音编码有几种不同的变体,而jellyfish是Python中用于尝试其中的一个很好的软件包。这是一个如何与Soundex编码一起使用的示例:

import jellyfish
import pandas as pd

data = pd.DataFrame({
    "name": [
        "red rocks canyon",
        "redrcks",
        "redrock canyon",
        "red rocks canyons",
        "bosque",
        "bosque escoces",
        "bosque escocs",
        "borland",
        "borlange"
    ]
})
data["soundex"] = data.name.apply(lambda x: jellyfish.soundex(x))
print(data.groupby("soundex").agg({"name": lambda x: ", ".join(x)}))

此打印:

                                                      name
soundex                                                   
B200                                                bosque
B222                         bosque escoces, bosque escocs
B645                                     borland, borlange
R362     red rocks canyon, redrcks, redrock canyon, red...

这绝对不是完美的,您必须小心,因为它可能会过于激进地将事情分组,但是我希望它能给您一些尝试的机会!