Pandas如何按条件替换DataFrame列值并将非匹配值标记为Invalid
错误原因
str.replace()执行的是子串匹配替换,而非单元格整值匹配:只要字符串内包含目标字符就会触发替换。'2022'中包含3个'2'字符,第二次调用str.replace('2', 'ACTUADOR')时,三个'2'都会被替换,最终就得到了错误的ACTUADOR0ACTUADORACTUADOR。
正确实现方式
做整值匹配替换即可,同时给未匹配到规则的值统一填充"Invalid",两种常用写法都可以:
方法1:整值replace+fillna兜底
先定义值和替换结果的映射字典,匹配到的内容按字典替换,未匹配到的内容自动保留为空值,最后统一填充为"Invalid":
import pandas as pd df = pd.DataFrame({'ID': [1,2,3,4,5], 'Name_columns': ['1', '2', '2022', '1', '1']}) replace_map = { '1': 'SENSOR', '2': 'ACTUATOR' # 注意你之前代码里把ACTUATOR误写为ACTUADOR,这里按需求修正 } df['Name_columns'] = df['Name_columns'].replace(replace_map).fillna('Invalid')
方法2:map映射+fillna兜底
逻辑和上述方法完全一致,写法更简洁:
df['Name_columns'] = df['Name_columns'].map(replace_map).fillna('Invalid')
最终运行结果
执行代码后输出结果完全符合需求:
ID Name_columns 0 1 SENSOR 1 2 ACTUATOR 2 3 Invalid 3 4 SENSOR 4 5 SENSOR
提示:
str.replace()仅适用于替换字符串内部的特定子串场景,不要用来做整值的枚举替换。
内容的提问来源于stack exchange,提问作者Jane Borges
相关产品推荐
相关产品推荐

