首页 > 解决方案 > Python 错误:ValueError:只能将大小为 1 的数组转换为 Python 标量

问题描述

我有一个数据框,它从 json 中选择最低价格和卖家。但是有时我会收到此错误:ValueError: can only convert an array of size 1 to a Python scalar它有时会发生,但并非总是如此。

这是代码..

import pandas

Data= []
Data+=[{"A": "X1FFFFF", "Special":{"type": "USD"},"B": "0.11",}]
Data+=[{"A": "X2FFFFF", "Special":{"type": "EUR"},"B": "0.122",}]
Data+=[{"A": "X3FFFFF", "Special":{"type": "EUR"},"B": "0.1444",}]

Data = pandas.DataFrame(Data)
Data = Data.astype({"B": float})
Data = Data.astype({"A": str})

euro_rows = Data.loc[Data["Special"] == {'type': 'EUR'}]

lowest_price = euro_rows.loc[euro_rows['B'] == euro_rows['B'].min()]

seller = lowest_price['A'].item()
price  = lowest_price['B'].item()

print(seller)
print(price)

我能做些什么来解决这个错误?

完全错误:

  File "Fuck.py", line 50, in GetLowestPriceAndSeller
    seller = lowest_price['seller'].item()
  File "/usr/local/lib/python3.8/site-packages/pandas/core/base.py", line 420, in item
    raise ValueError("can only convert an array of size 1 to a Python scalar")
ValueError: can only convert an array of size 1 to a Python scalar

标签: pythonpandas

解决方案


我的猜测是,您在最低价格中有几个项目,如果它们的成本完全相同,这可能是可能的,这也可以解释为什么它只是有时会发生。

所以罪魁祸首可能是对 .item() 的调用,它需要一个项目,但你有一个数组。

然后,您可以简单地获取整个最低价格数组,而不仅仅是项目。这在一定程度上取决于您究竟想对数据做什么,因为在我看来,情况与您最初的情况有所不同。


推荐阅读