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

在Pandas DataFrame中按条件对列值乘1000失败,求解决方案

问题分析与解决方案

你的代码未达到预期效果,核心问题是判断条件依赖字符串长度和类型判断的逻辑存在漏洞,具体问题包括:

  • 若prix列的值是浮点数(如22.0),str(x)会变成"22.0",长度为4,不符合len(str(x))==2的条件;
  • 若值是字符串类型的数字(如"22"),int(x)==x会直接抛出类型错误;
  • 依赖字符串长度还会误判带前导零的数值(如"02")。

正确实现方式

先统一列的数值类型,再通过数值范围+整数判断筛选需要转换的值,推荐用Pandas/NumPy的矢量化操作(比apply更高效):

import pandas as pd
import numpy as np

# 先将prix列转为数值类型,处理可能的字符串或缺失值
k['prix'] = pd.to_numeric(k['prix'], errors='coerce')

# 生成prix_millions列:仅对10-99之间的整数乘以1000
k['prix_millions'] = np.where(
    (k['prix'].between(10, 99)) & (k['prix'].is_integer()),
    k['prix'] * 1000,
    k['prix']
)

代码说明

  1. pd.to_numeric:统一将列转为数值类型,errors='coerce'会把无法转换的值设为NaN,避免后续报错;
  2. between(10,99):精准筛选两位数的数值,替代不可靠的字符串长度判断;
  3. is_integer():确保值是整数(兼容int和float类型的整数,如22和22.0);
  4. np.where:矢量化操作,比apply循环处理快得多,适合大数据量场景。

示例测试

如果原始数据是:

k = pd.DataFrame({'prix': [22, 3.5, 120, 22.0, '25', 'abc']})

处理后prix_millions列的结果为:[22000.0, 3.5, 120.0, 22000.0, 25000.0, NaN],完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:32:15