数据转成int本来是1000+的数据变成两位数甚至个位数


df['unit_price'] = df.unit_price.map(lambda x: int(re.findall(r'\d+', x)[0]))

这个数据转成int本来是1000+的数据变成两位数甚至个位数,如果是三位数的数据就没关系,这是为什么啊,要怎么解决

【以下回答由 GPT 生成】

这个问题的原因是在将字符串转换为整数时,代码只提取了找到的第一个数字,而没有考虑到数据中可能存在多个数字的情况。所以当数据中有多个数字时,只提取了第一个数字,导致数据变成了错误的值。

解决这个问题的方法是使用正则表达式提取所有的数字,并将它们组合成一个完整的数字。下面是一个修复代码的示例:

import re

def extract_number(x):
    numbers = re.findall(r'\d+', x)  # 提取所有的数字
    number_str = ''.join(numbers)  # 将数字列表转换为字符串
    return int(number_str)  # 将字符串转换为整数

df['unit_price'] = df.unit_price.map(extract_number)

上述代码使用了一个新的extract_number函数来提取所有的数字,并将它们组合成一个字符串。然后,将该字符串转换为整数并将其赋值给unit_price列。

请注意,为了使用上述代码,需要先导入re模块,因为它提供了正则表达式的功能。

使用上述修复代码,可以正确地将数据转换为整数,并保持原始格式。希望这个解决方案能够帮到你!如果还有其他问题,请随时向我提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

给出一部分数据样例看看

4,916元/平变成4这样
你用re.findall(r'\d+', x)的结果是['4', '916'],所以int(re.findall(r'\d+', x)[0])就是4了