利用pandas.DataFrame.replace优雅的进行E
2019-12-17 本文已影响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)
参考: