做數(shù)據(jù)處理工作時(shí)讶隐,免不了對(duì)數(shù)據(jù)中的 特殊值 進(jìn)行替換。
傳統(tǒng)方式替換:
循環(huán)行久又、列巫延、目標(biāo)值
斷是否滿足條件
滿足條件進(jìn)行替換,否則繼續(xù)
雖然思路清晰籽孙,實(shí)現(xiàn)起來(lái)也沒(méi)有難點(diǎn)烈评,但實(shí)際工作中往往是列不同、目標(biāo)值不同犯建,替換值也不同讲冠,需要很多的循環(huán)、判斷嵌套适瓦,很容易犯編程中的 循環(huán)判斷嵌套太深竿开、硬編碼
問(wèn)題。
這種情況下玻熙,就可以借助強(qiáng)大的 pandas.DataFrame.replace 來(lái)實(shí)現(xiàn)優(yōu)雅處理否彩。
這里我選擇的是 dict-like (字典模式)來(lái)演示,原因如下:
場(chǎng)景全嗦随,
解決循環(huán)判斷嵌套太深問(wèn)題
(后面介紹常見(jiàn)場(chǎng)景)調(diào)用方式相對(duì)統(tǒng)一列荔,
簡(jiǎn)單敬尺、優(yōu)雅
可以抽象為配置,
解決硬編碼問(wèn)題
(存儲(chǔ)在配置文件或配置庫(kù)中)
全局替換
- 目標(biāo)值相同贴浙,替換值相同
MAPPING = {
'old_val': 'new_val'
}
df = df.replace(MAPPING)
- 目標(biāo)值不同砂吞,替換值相同
MAPPING = {
'old_val_1': 'new_val',
'old_val_2': 'new_val'
}
df = df.replace(MAPPING)
- 目標(biāo)值不同,替換值不同
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)
正則表達(dá)式
將 MAPPING 中的 target 改為 正則表達(dá)式字符串 或 compiled pattern 蜻直,再將 MAPPING 傳給 選填參數(shù)regex 即可。
MAPPING = {
'match_old_val_regex': 'new_val'
}
df = df.replace(regex=MAPPING)
參考: