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
相关产品推荐
相关产品推荐

