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

pandas中如何提取带单位列数值并对M后缀值乘1000(复刻Excel逻辑)

pandas复刻Excel逻辑处理带单位Size列方法

核心逻辑和你使用的Excel公式完全对齐:识别字符串末尾的单位后缀,后缀为M时提取数值后乘1000,其余后缀直接提取数值。

基础实现(代码直观易读)

如果你的数据量在十万行以内,直接用apply逐行处理即可,写法和Excel公式逻辑一一对应:

# 假设你的DataFrame变量名为df
df['Size_converted'] = df['Size'].apply(
    lambda s: float(s[:-1]) * 1000 if s.strip()[-1].upper() == 'M' else float(s[:-1])
)

代码对应Excel逻辑的映射关系:

  • s[:-1]:等价于LEFT(A2,LEN(A2)-1),截取掉字符串最后一位的单位字符,拿到纯数字部分
  • s.strip()[-1].upper() == 'M':等价于RIGHT(A2,1)="M",额外增加了首尾空格去除、后缀大写转换的容错,避免数据格式不规范导致判断错误;如果确认数据完全无脏数据,可简化为s[-1] == 'M'
  • 分支判断后做数值转换、M单位乘1000的操作,和Excel的IF分支完全一致。

用你给出的样例数据测试,处理结果如下:

SizeSize_converted
19M19000.0
14M14000.0
160k160.0

如果需要直接覆盖原Size列,把赋值目标改成df['Size']即可。

高性能实现(适合百万级以上大数据量)

apply本质是逐行循环,数据量很大时性能较差,可以用pandas原生向量化操作提升运行速度:

# 批量提取所有行的数字部分
num_part = df['Size'].str[:-1].astype(float)
# 批量判断所有行的后缀是否为M
is_m_suffix = df['Size'].str.strip().str[-1].str.upper() == 'M'
# 批量完成换算
df['Size_converted'] = num_part * is_m_suffix.map({True: 1000, False: 1})

计算结果和基础实现完全一致,运行速度比apply版本快5~10倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:03:22