You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas中优雅高效实现字符串到数值映射的最优方法(AA/AB/BB规则)

在Pandas中优雅高效地将字符串编码为数值的方法

针对你提出的字符串编码需求,**pandas.DataFrame.replace()**是比apply()更高效优雅的实现方式——它基于矢量化操作,避免了apply()系列方法的逐元素/逐行循环,性能提升明显。以下是具体实现方案:

方法一:使用replace()进行矢量化映射

先定义映射字典,直接传入replace()即可完成全表的批量替换,代码简洁且效率最高:

import pandas as pd

table_input = pd.DataFrame({'Col1': ["AB", "BB"],
                          'Col2': ["AA", "AB"]},
                          index=['Sample1', 'Sample2'])
table_output = pd.DataFrame({'Col1': [0.5, 1.0],
                          'Col2': [0.0, 0.5]},
                          index=['Sample1', 'Sample2'])

# 定义映射规则
mapping = {'AA': 0.0, 'AB': 0.5, 'BB': 1.0}
# 执行替换
table_result = table_input.replace(mapping)

# 验证结果是否符合预期
print(table_result.equals(table_output))  # 输出 True

方法二:使用applymap()配合字典映射

如果需要更灵活的元素级处理(比如处理未在映射中的值),可以用applymap()调用字典的get()方法,性能略逊于replace()但仍优于普通apply():

# 执行元素级映射,未匹配值可设置默认值(这里设为NaN)
table_result = table_input.applymap(lambda x: mapping.get(x, pd.NA))

效率对比

  • replace():底层基于Pandas的矢量化引擎实现,处理大表时速度比apply()快数倍甚至数十倍。
  • applymap():虽然是逐元素处理,但比逐行的apply()更简洁高效。
  • 普通apply():逐行/逐列循环处理,性能最差,不推荐用于大规模数据。

内容的提问来源于stack exchange,提问作者Pm740

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:47:53