python - 如何规范化名称

标签 python pandas nlp normalize

我正在使用 pandas 数据框,我有每个公司都有客户的数据。然而,公司名称略有不同,但最终会影响数据。 示例:

Company    Customers
AAAB       1,000
AAAB Inc.  900
The AAAB Inc.  20
AAAB the INC   10

我想从具有非标准名称的几家不同公司的数据库中获取总客户数。知道我应该从哪里开始吗?

最佳答案

我记得读过this blog关于fuzzywuzzy library (查看 another question ),可以这样做:

pip install fuzzywuzzy

您可以使用它的 partial_ratio 函数来“模糊匹配”字符串:

In [11]: from fuzzywuzzy.fuzz import partial_ratio

In [12]: partial_ratio('AAAB', 'the AAAB inc.')
Out[12]: 100

这似乎对它是一个很好的匹配充满信心!

In [13]: partial_ratio('AAAB', 'AAPL')
Out[13]: 50

In [14]: partial_ratio('AAAB', 'Google')
Out[14]: 0

我们可以在实际公司列表中取最佳匹配(假设你有):

In [15]: co_list = ['AAAB', 'AAPL', 'GOOG']

In [16]: df.Company.apply(lambda mistyped_co: max(co_list, 
                                                  key=lambda co: partial_ratio(mistyped_co, co)))
Out[16]: 
0    AAAB
1    AAAB
2    AAAB
3    AAAB
Name: Company, dtype: object

我强烈怀疑 scikit learn 或 numpy 库中有一些东西可以在大型数据集上更有效地执行此操作......但这应该可以完成工作。

如果您没有公司列表,您可能需要做一些更聪明的事情...

关于python - 如何规范化名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437631/

相关文章:

python - 返回打印语句仍然显示该值

r - 如何像 Pandas-Style 一样转换为 R 中的多列?

python - NLTK Tokenizer 编码问题

使用套接字进行 Python 端口转发

python - 使用 Pandas 与每组最近的条件行的差异

python - 如何获取 Gmail API 邮件的文本/纯文本部分

python - Pandas 的投资组合周转率

python - 如何将分组/分箱数据帧转换为 numpy 数组?

python - 将模式保存/加载匹配器作为新的管道组件

python - 无法读取 tensorflow 检查点以进行微调