美文网首页
利用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