美文网首页
利用pandas.DataFrame.replace优雅的进行E

利用pandas.DataFrame.replace优雅的进行E

作者: 蘑菇猎手 | 来源:发表于2019-12-17 16:24 被阅读0次

    做数据处理工作时,免不了对数据中的 特殊值 进行替换。

    传统方式替换:

    • 循环行、列、目标值

    • 断是否满足条件

    • 满足条件进行替换,否则继续

    虽然思路清晰,实现起来也没有难点,但实际工作中往往是列不同、目标值不同,替换值也不同,需要很多的循环、判断嵌套,很容易犯编程中的 循环判断嵌套太深、硬编码问题。

    这种情况下,就可以借助强大的 pandas.DataFrame.replace 来实现优雅处理。

    这里我选择的是 dict-like (字典模式)来演示,原因如下:

    • 场景全,解决循环判断嵌套太深问题(后面介绍常见场景)

    • 调用方式相对统一,简单、优雅

    • 可以抽象为配置,解决硬编码问题(存储在配置文件或配置库中)

    全局替换

    • 目标值相同,替换值相同
    
    MAPPING = {
        'old_val': 'new_val'
    }
    df = df.replace(MAPPING)
    
    • 目标值不同,替换值相同
    
    MAPPING = {
        'old_val_1': 'new_val',
        'old_val_2': 'new_val'
    }
    df = df.replace(MAPPING)
    
    • 目标值不同,替换值不同
    
    MAPPING = {
        'old_val_1': 'new_val_1',
        'old_val_2': 'new_val_2'
    }
    df = df.replace(MAPPING)
    

    部分列替换

    • column代表列名,其它同上
    
    MAPPING = {
        'columnA': {
            'old_val_1': 'new_val _1'
        },
        'columnB': {
            'old_val_2': 'new_val _2'
        }
    }
    df = df.replace(MAPPING)
    

    正则表达式

    MAPPING 中的 target 改为 正则表达式字符串compiled pattern ,再将 MAPPING 传给 选填参数regex 即可。

    MAPPING = {
        'match_old_val_regex': 'new_val'
    }
    df = df.replace(regex=MAPPING)
    

    参考:

    pandas.DataFrame.replace官方文档

    相关文章

      网友评论

          本文标题:利用pandas.DataFrame.replace优雅的进行E

          本文链接:https://www.haomeiwen.com/subject/ekusnctx.html