Error.where VALUERROR:使用iterable设置时,必须具有相等的len键和值

2024-06-25 23:20:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我非常感谢你的帮助。我对python没有太多的经验。我正在使用yfinance python模块开发一个代码来分析股票

有问题的代码如下(请查看大写字母注释):

#DOWNLOAD INFORMATION WITH YFINANCE (IT’S OK)
  stock = yf.download(simbolo,fechaInicial,fechaFinal,progress=False)
 
#SOME LINES AFTER, IN ORDER TO ADD OTHER COLUMNS:
#ADD THE fecha AND anio COLUMNS TO stock  (IT’S OK)
  stock['fecha'] = pd.to_datetime(stock.index.values)
  stock['anio'] = (stock['fecha'].dt.year).astype('int')
 
#THE CONTENTS OF stock AT THIS POINT IS:

stock

#LOOP FOR CREATE ONE COLUMN IN stock FOR EVERY YEAR IN DFtablaInflacion. THE CONTENTS OF DFtablaInflacion IS:

DFTablaInflacion

for j in DFtablaInflacion.index:
    anio = int(DFtablaInflacion['año'][j])
    inflacion = float(DFtablaInflacion['valor'][j])
    stock[str(anio)] = np.where(stock['anio'] <= anio, inflacion, float(0.0))
 
#THE LOOP WORKS FOR THE TWO FIRST YEARS: 2016 AND 2017:

2016

2017

但是在第三年失败,当某些行的条件innp.where(stock['anio'] <= anio, inflacion, float(0.0))为真(anio = 2018):

---> 70 stock[str(anio)] = np.where(stock['anio'] <= anio, inflacion, float(0.0))

ValueError: Must have equal len keys and value when setting with an iterable

#I MODIFIED THE CODE IN ORDER TO TEST:
 
for j in DFtablaInflacion.index:
    anio = int(DFtablaInflacion['año'][j])
    inflacion = float(DFtablaInflacion['valor'][j])
 
    prueba = np.where(stock['anio'] <= anio, inflacion, float(0.0))
    print(type(prueba))
    print(prueba)

测试输出是(prueba): prueba

并且prueba对于整个for循环来说是正常的,因此错误在:

stock[str(anio)] = np.where(stock['anio'] <= anio, inflacion, float(0.0))

只有当np.where中的条件为true时才会发生这种情况


Tags: thetoinforindexstocknpfloat