Python for 循环期间的标量值错误

Python scalar value error during for loop

我得到了如下所示的 pandas 数据框:

如果不是 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: can only convert an array of size 1 to a Python scalar

你能帮我找到这个问题的原因和解决方法吗?

如果性能不重要或 DataFrame 较小​​,请使用 iterrows 进行循环:

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

这里no loops是必须的

为了提高性能,按字典使用 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)