首页 > 解决方案 > for循环期间的Python标量值错误

问题描述

我得到了如下的熊猫数据框:

数据集

如果它不是PLN,我想转换货币。为此,我编写了代码:

def convert_currency():
   lst = []
   for i in risk['AMOUNT']:
       if risk['CURRENCY'].item() == 'EUR':
           lst.append(i * eurpln['EURPLN'][0])
       elif risk['CURRENCY'].item() == 'USD':
           lst.append(i * usdpln['USDPLN'][0])
       elif risk['CURRENCY'].item() == 'CHF':
           lst.append(i * chfpln['CHFPLN'][0])
       elif risk['CURRENCY'].item() == 'GBP':
           lst.append(i * gbppln['GBPPLN'][0])
       else:
           lst.append(i)
   return lst

但就在我试图运行这个函数之后,我得到了值错误:

----> 4 if risk['CURRENCY'].item() == 'EUR':

ValueError:只能将大小为 1 的数组转换为 Python 标量

你能帮我找出这个问题的原因以及解决方案吗?

标签: pythonpandasdataframenumpyseries

解决方案


这里不需要循环

对于字典的性能使用map,然后按AMOUNT列进行多个:

d = {'EUR':eurpln['EURPLN'][0], 'USD': usdpln['USDPLN'][0],
     'CHF':chfpln['CHFPLN'][0], 'GBP': gbppln['GBPPLN'][0]}

risk['AMOUNT'] = risk['CURRENCY'].map(d).mul(risk['AMOUNT'], fill_value=1)

推荐阅读