如何解决使用模糊规范化列的字符串
我有一个与此类似的 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"
或者类似的东西。对不起,我一直无法正确使用循环。请帮帮我。
解决方法
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。