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了