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

Pandas基于条件按现有列创建USD金额列报ValueError如何解决?

问题原因分析

1. 直接报错原因:数字误用千分位逗号

你在写KRW、VND、IDR的汇率时,用了千分位分隔符1,171.56、22,759.00、14,188.86,Python会把带逗号的数字识别为元组,不是单个数值:

  • 1,171.56等价于(1, 171.56),是长度为2的元组
  • 你用Series除以元组后返回的结果长度为2,和DataFrame的9892行长度不匹配,就触发了这个ValueError。

注意:Python里数字不能带千分位逗号,直接写1171.56、22759.00、14188.86即可。

2. 逻辑错误:循环写法不满足逐行转换需求

你现在的循环是遍历CurrencyCode列的每一个值,每次满足条件就给整个USD Amount列赋值,最终整个列的结果只会被最后一次循环的判断条件覆盖,完全达不到逐行根据对应币种换算的需求。

正确实现方案

推荐用汇率字典+map的向量化写法,性能更高逻辑也更清晰:

# 先定义汇率映射字典,注意数字不要加千分位逗号
exchange_rate = {
    'RMB': 6.39,
    'THB': 33.26,
    'INR': 75.01,
    'KRW': 1171.56,
    'VND': 22759.00,
    'IDR': 14188.86,
    'MYR': 4.15,
    'USD': 1,
    'EUR': 0.86,
    'TUS': 1,
    'GBP': 33.26
}
# 逐行匹配汇率,没有对应汇率的默认返回1(也就是原金额不变)
df1['USD Amount'] = df1['Amount'] / df1['CurrencyCode'].map(exchange_rate).fillna(1)
# 如果需要保留两位小数可以加round
# df1['USD Amount'] = df1['USD Amount'].round(2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:27:04