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分支完全一致。
用你给出的样例数据测试,处理结果如下:
| Size | Size_converted |
|---|---|
| 19M | 19000.0 |
| 14M | 14000.0 |
| 160k | 160.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
相关产品推荐
相关产品推荐

