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

如何将Pandas列中含M/K单位的值统一转换为Kb整数?

解决DataFrame存储容量单位转换问题

核心思路

要完成单位转换,关键是同时提取数值和单位信息,再根据单位执行不同的计算逻辑。之前的尝试要么丢失单位,要么正则表达式错误导致无法正确解析,下面是高效的实现方案:

具体代码实现

import pandas as pd
import numpy as np

# 构造示例DataFrame(替换成你的实际数据)
data = {'Size': ['5.3M', '47M', '556k', '526k', '76M', '7.6M', '59M', '9.7M', '78M',
       '72M', '43M', '7.7M', '6.3M', '334k', '93M', '65M', '23k',
       '7.3M', '6.5M', '1.5M', '7.5M']}
df = pd.DataFrame(data)

# 1. 提取数值(支持小数)和单位
df[['num', 'unit']] = df['Size'].str.extract(r'^(\d+\.?\d*)([Mk])$', expand=True)

# 2. 将数值转换为浮点数
df['num'] = df['num'].astype(float)

# 3. 根据单位计算Kb值:M转Kb乘1000,k直接取整
df['Size_kb'] = np.where(df['unit'] == 'M', (df['num'] * 1000).astype(int), df['num'].astype(int))

# 可选:删除中间生成的num和unit列
df = df.drop(['num', 'unit'], axis=1)

关键细节说明

  • 正则表达式r'^(\d+\.?\d*)([Mk])$':精准匹配以数字(含小数)开头、以M/k结尾的字符串,分别捕获数值和单位。
  • 使用np.where替换apply:处理9000行数据时,numpy的向量化操作比逐行遍历的apply效率更高。
  • 最终结果转为整数:符合你要求的Kb单位整数输出。

为什么之前的尝试失败?

  • 只提取数字会丢失单位标识,无法区分需要乘以1000的行;
  • 提取(\d+[M$])的正则错误:把数字和M作为整体提取,包含字符串M的内容无法直接转为整数,且没考虑小数情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:10:52