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

如何将DataFrame价格列中带M/k的单位值转换为数值并正确回填?

问题原因

你第二种写法的错误核心是:循环过程中每次都给整个car['Price']列赋值为当前的x,相当于每轮循环都把所有行的价格覆盖成当前值,最终整个列自然会保留最后一轮循环的计算结果。

解决方案

方案1:基于现有代码的最小修改

你第一段代码已经把所有计算好的正确值存到了correctVal列表里,直接把这个列表赋值给Price列即可:

car['Price'] = car['Price'].astype('string')
car['Price'] = car['Price'].str.replace('M', '*1000000', regex=True)
car['Price'] = car['Price'].str.replace('k', '*1000', regex=True)
correctVal = []
for x in car['Price']:
    x = pd.eval(x)
    correctVal.append(x)
# 新增这一行直接赋值
car['Price'] = correctVal

方案2:更简洁的向量化写法(无需手动循环)

直接用apply方法批量处理每一行的值,代码更简洁,执行效率也更高:

car['Price'] = car['Price'].astype('string')
car['Price'] = car['Price'].str.replace('M', '*1000000', regex=True)
car['Price'] = car['Price'].str.replace('k', '*1000', regex=True)
# 直接批量执行表达式计算
car['Price'] = car['Price'].apply(pd.eval)

两种方案都可以正常完成数值转换和回填,第二种写法更符合pandas的使用习惯,也不容易出现循环赋值的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:24:10