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

如何在pandas中将$1.2K/$1.2M类object dtype转换为float dtype

pandas转换带单位货币字符串为数值的实现方法

核心思路

首先拆分原始字符串中的货币符号、数字部分、单位后缀,再将后缀转换为对应倍率和数字相乘,最终生成float类型的新列Y。

完整实现代码

第一步:导入依赖并构造示例数据

import pandas as pd

# 此处替换为你自己的DataFrame即可
df = pd.DataFrame({
    'raw_currency': ['$1.2K', '$1.45M', '$500', '$3.2B', '$89.9K']
})

第二步:定义单位映射规则

你可以根据自己的数据补充其他单位:

unit_map = {
    'K': 10 ** 3,
    'M': 10 ** 6,
    'B': 10 ** 9,
    '': 1
}

第三步:执行转换生成新列Y

向量化写法(性能更高,适合大数据量)

# 正则提取$后的数字部分和单位部分
df[['num_part', 'unit_part']] = df['raw_currency'].str.extract(r'\$(\d+\.?\d*)([KMB]?)')
# 计算最终数值
df['Y'] = df['num_part'].astype(float) * df['unit_part'].map(unit_map)
# 可选:删除中间生成的辅助列
df.drop(columns=['num_part', 'unit_part'], inplace=True)

简洁apply写法(适合小数据量,代码更易读)

def curr_to_float(val):
    # 去掉美元符号
    val_clean = val.replace('$', '')
    # 匹配最后一位是否为单位
    last_char = val_clean[-1].upper()
    if last_char in unit_map:
        return float(val_clean[:-1]) * unit_map[last_char]
    return float(val_clean)

df['Y'] = df['raw_currency'].apply(curr_to_float)

注意事项

  • 如果数据中存在小写的k、m等单位,可在转换前新增一行df['raw_currency'] = df['raw_currency'].str.upper()统一格式
  • 最终生成的Y列默认是float64类型,直接满足数值运算要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:15:03