Pandas列值映射:指定值转换为新值,是否用if语句实现?
问题解答
首先,不是只能用if语句,不过用if语句确实可以实现这个转换需求。下面分别给出不同的实现方式:
1. 使用if语句的实现方式
可以通过apply方法结合lambda表达式里的if-elif逻辑逐行处理数据:
import pandas as pd # 构造原始数据 df = pd.DataFrame({'gender': [1,2,1,1,3,2,1,4,5,1]}) # 用if-elif逻辑完成转换 df['gender'] = df['gender'].apply(lambda x: 1 if x == 1 else 2 if x in [2,5] else 3 if x in [3,4] else x) print(df)
输出结果符合你的期望:
gender 0 1 1 2 2 1 3 1 4 3 5 2 6 1 7 3 8 2 9 1
2. 更高效的Pandas原生方法(推荐)
当处理大规模数据时,Pandas的向量化操作比逐行的if语句性能更好,推荐使用以下两种方式:
方法一:使用replace
通过定义映射规则批量替换值:
# 定义转换规则 replace_rule = {1:1, 2:2, 5:2, 3:3, 4:3} df['gender'] = df['gender'].replace(replace_rule)
方法二:使用map
同样基于映射规则完成转换:
# 定义转换规则 map_rule = {1:1, 2:2, 3:3, 4:3, 5:2} df['gender'] = df['gender'].map(map_rule)
内容的提问来源于stack exchange,提问作者hulio_entredas
相关产品推荐
相关产品推荐

