【发布时间】:2021-01-23 19:51:00
【问题描述】:
我有一个与此类似的 df(这只是一个示例,原始 df 为西班牙语,在此处复制粘贴摘录很麻烦):
date city1 city2 ID company
01-10-2020 Mexico Mexico 1234 ColaCola
03-01-2020 Mexico Baja 567 Cola cola
02-09-2020 Mexico Culiacan 8900 Cola Cola Inc.
03-04-2020 Mexico Tulum 2344 Cola Cola Inc
06-07-2020 Mexico Ver 3459 Cola cola inc
所以,我需要将公司名称的所有这些变体都放在同一个名称下:
date city1 city2 ID company
01-10-2020 Mexico Mexico 1234 Cola Cola
03-01-2020 Mexico Baja 567 Cola Cola
02-09-2020 Mexico Culiacan 8900 Cola Cola
03-04-2020 Mexico Tulum 2344 Cola Cola
06-07-2020 Mexico Ver 3459 Cola Cola
我尝试使用:
df['company'].str.replace({'ColaCola': 'Cola Cola', 'Cola cola':'Cola Cola'})
等等。问题是,公司名称有很多变化(原件要长得多):大写/非大写字母、空格、错别字、句点、空格......你说出来!手动完成需要我几个小时。 所以,我需要一个更好的方法来做到这一点。然后我遇到了wuzzyfuzzy。但我无法超越这些例子。我真的不明白。
我认为这样的事情可能会奏效:
for row in df.company:
fuzz.partial_ratio("Cola Cola": "str.row")
if fuzz.partial_ratio >= 90:
"str.row" = "Cola Cola"
或类似的东西。对不起,我从来没有能够正确使用循环。请帮帮我。
【问题讨论】:
-
您是否知道您的 DataFrame 有多少独特的公司(即您知道应该有可口可乐、纳贝斯克、孩之宝、强生,以及它们所有不同的表示形式)还是您不知道也不需要一种以编程方式聚集相似公司名称的方法?后者可能非常复杂。
-
我有 50 家独特的公司。是的,一次全部完成会很困难(而且我不知道该怎么做)
标签: python pandas fuzzywuzzy