如何按条件对Pandas DataFrame的prix列做乘法并修复异常
问题修复方案
你的问题出在**prix列的数据类型是字符串而非数值型**,当你对字符串执行x * 1000时,Python会把它当成字符串重复操作,所以"57"*1000就会变成一串重复的"575757...",而不是数值乘法的结果。
修复步骤如下:
- 先将
prix列转换为数值类型(整数或浮点数),确保乘法是数学运算而非字符串操作 - 再执行你原本的条件逻辑(仅对长度为2的数值乘以1000)
基础修复代码
# 先转换为整数类型(如果是小数就用float) c['prix'] = c['prix'].astype(int) # 执行条件乘法 c['prix'] = c['prix'].apply(lambda x: x * 1000 if len(str(x)) == 2 else x)
更高效的矢量化写法(推荐)
用numpy的where替代apply,性能更好,尤其适合大数据集:
import numpy as np c['prix'] = c['prix'].astype(int) c['prix'] = np.where(c['prix'].astype(str).str.len() == 2, c['prix'] * 1000, c['prix'])
处理脏数据的情况
如果prix列里存在非数值的无效值,可以用pd.to_numeric强制转换并处理错误:
c['prix'] = pd.to_numeric(c['prix'], errors='coerce') # 无效值会转为NaN # 只对非空且长度为2的数值执行乘法 c['prix'] = np.where((c['prix'].notna()) & (c['prix'].astype(str).str.len() == 2), c['prix'] * 1000, c['prix'])
内容的提问来源于stack exchange,提问作者kim seol
相关产品推荐
相关产品推荐

