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)
我得到了如下所示的 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)