【问题标题】:normalize strings of a column with fuzzy用模糊规范化列的字符串
【发布时间】: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


【解决方案1】:
obj = df['company']

# have a look at `company`
obj.value_counts().sort_index()

# use regexp and find the common part in regexp
cond = obj.str.contains('cola\s*cola', flags=re.IGNORECASE)
df.loc[cond, 'NAME_new'] = 'Cola Cola'
...
# find the other company name's common & unique part and rename it

print(df)

0        date   city1     city2    ID         company   NAME_new
1  01-10-2020  Mexico    Mexico  1234        ColaCola  Cola Cola
2  03-01-2020  Mexico      Baja   567       Cola cola  Cola Cola
3  02-09-2020  Mexico  Culiacan  8900  Cola Cola Inc.  Cola Cola
4  03-04-2020  Mexico     Tulum  2344   Cola Cola Inc  Cola Cola
5  06-07-2020  Mexico       Ver  3459   Cola cola inc  Cola Cola

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 2018-09-29
    • 2020-02-12
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2013-06-29
    • 2019-04-19
    相关资源
    最近更新 更多