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

如何用if语句处理带m/Th单位的字符串转整数,解决替换不全与float迭代报错

问题分析
  • 关于TypeError: argument of type 'float' is not iterable报错:你的猜测不对,该报错是因为DataFrame中存在空值(NaN属于float类型),直接对float类型执行"m" in i的包含判断时,float不可迭代,因此触发报错,和小数带m的格式无关。
  • 关于m前缀适配问题:你最初的替换逻辑仅匹配.00m后缀,修改后的正则逻辑会丢失小数点的位数信息,例如£1.2m会被提取为12,乘以10000得到120000,和正确值1200000相差10倍,逻辑存在问题。
修正后代码

批量处理版本(适配你原有的输入格式)

import re
import numpy as np

def convert_currency_to_int(x):
    data = []
    for i in x:
        # 先处理非字符串/空值情况,避免报错
        if not isinstance(i, str):
            # 可根据需求替换为0或者其他默认值
            data.append(np.nan)
            continue
        # 正则匹配数值部分(支持整数、小数、开头带小数点的格式)和单位
        match_res = re.search(r'([\d]*\.?\d+)(m|Th\.)', i)
        if not match_res:
            # 未匹配到有效单位的场景,可自定义处理逻辑
            data.append(np.nan)
            continue
        val = float(match_res.group(1))
        unit = match_res.group(2)
        if unit == 'm':
            res = int(val * 1000000)
        elif unit == 'Th.':
            res = int(val * 1000)
        data.append(res)
    return data

DataFrame 专用版本(更适合大表批量处理)

import re
import numpy as np

def convert_single_currency(i):
    if not isinstance(i, str):
        return np.nan
    match_res = re.search(r'([\d]*\.?\d+)(m|Th\.)', i)
    if not match_res:
        return np.nan
    val = float(match_res.group(1))
    return int(val * 1000000) if match_res.group(2) == 'm' else int(val * 1000)

# 使用示例,直接对指定列做转换即可
# df['转换后整数字段'] = df['原货币字段'].apply(convert_single_currency)
测试验证
# 测试数据包含.50m格式、空值等场景
data_array = np.array(['£67.50m', '£63.00m', '£49.50m','£90Th.', '£720Th.', '£.50m', '£1.2m', np.nan], dtype=object)
print(convert_currency_to_int(data_array))

输出结果:
[67500000, 63000000, 49500000, 90000, 720000, 500000, 1200000, nan]

适配范围:

  • 自动跳过空值/非字符串类型数据,解决TypeError报错
  • 支持任意小数格式的m单位匹配,包括.50m这类开头带小数点的场景
  • 自动过滤货币符号,不需要额外替换£等特殊符号
  • 数值计算逻辑准确,不会出现位数错位问题

内容的提问来源于stack exchange,提问作者me.limes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:06:03