微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 使用str.contains将字符串的一部分替换为分隔符

在我转向excel宏的可怕世界之前,你是我最后的希望堡垒,

我有一个来自excel的庞大数据框架,我正在操纵,Pandas已被证明对编辑非常有用,因为excel非常挣扎.

我的最后一期如下:

现在,我有一个列,列出超过100k行的用户兴趣.问题是数据从未经过验证,所以我有潜在的有用信息,我需要操作10个输出之一.

我发现使用str.replace和str.contains是非常有用的,我想我会构建一些dicts或列表来迭代来处理逻辑.

当我在列表中使用str.contains时,它会替换整个字符串,我需要在分隔符之后保留信息以进行替换(因为用户可以有多个兴趣).

所以我可以

User, Interest 
a     Racing, Football, Soccer, Kickball, footy, Basketball, Hockey, Running, Jogging, Jogging & Running 
b      Racing, Jogging, Basketball, Computers, Reading. 
c     Ice Hockey

例如,有多个足球的例子需要被归入一个类别,依此类推.

假设我们只是在运动之后,那么清理非运动数据的有效方法是什么呢?

我希望我的整个问题都有道理.

输出

User, Interest
a      Race, Ball Sport, Athletics
b      Race, Ball Sport, Athletics
c      Athletics 

解决方法:

我不知道你是想通过修改它来清理文件,还是想要在运行时有选择地过滤兴趣,但是我会这样做:

>首先,我将得到所有兴趣的排序(和唯一)列表:将所有这些列表复制到一个文件中,每行一个,并运行一些排序-u FILE>在Bash或其他地方输出.
>然后我会重新组合兴趣(Racing和Race => Race)
>使用这些组,我将在Python中使用字典创建映射:

mapping = {
    'racing': 'Race',
    'race': 'Race',
    'football': 'Ball Sport',
    ...
}

>最后,在阅读文件时,我会使用一个函数来返回每行的验证兴趣:

def validate_interests(*interests):
    validated = []
    for interest in interests:
        valid = mapping.get(interest.lower(), None)
        if valid is not None:
            validated.append(valid)
    return validated


In [10]: validate_interests('Football', 'Racing')
Out[10]: ['Ball Sport', 'Race']

当然,您需要迭代这些行并将它们解析为一系列兴趣,但我不会过多介绍细节.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐