ValueError: установка элемента массива с последовательностью для pd df & np.array - PullRequest
1 голос
/ 03 марта 2020

Я получаю ValueError: setting an array element with a sequence для строки beta[i]=np.cov(rm[i],ra[i]), когда i=0, что означает, что для l oop запускается и останавливается, поэтому я получаю первые значения векторов rm и ra, но не первое значение beta. agg_df - это pd df с 50 строками и 1 столбцом с именем mean.

import pandas as pd
import glob
import numpy as np
path ="C:\\Users\\sharon\\Desktop\\financial mathematics\\sadna"
all_files = glob.glob(path + "/*.csv")
df_list = [(pd.read_csv(f, encoding = "utf-8", header = None,usecols = [3], nrows = 470, ).assign(filename = f)) for f in all_files]
final_df = pd.concat(df_list)
final_df[3]= final_df[3].apply(pd.to_numeric, errors='coerce')
agg_df = final_df.groupby(['filename']).agg(['mean'])
agg_df.columns=['mean']
agg_df.index=range(50)
ra=np.ones(shape=(50))
beta=np.ones(shape=(50))
rm=np.ones(shape=(50))
for i in range(0,50):
    rm[i]=np.mean(agg_df['mean'])
    ra[i]=agg_df.loc[i,'mean']
    beta[i]=np.cov(rm[i],ra[i])

edit: данные в agg_df являются средним по проценту Ежедневно меняется цена на 50 акций, каждая строка - одна акция. in the image there are the types of my varaibles

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

In:

beta[i]=np.cov(rm[i],ra[i])

beta, rm и ra - все (50,) массивы. Так что rm[i] et c является скаляром, а beta[i] может содержать только один номер.

Если я даю np.cov скалярам, ​​я получаю предупреждение, и ( 2,2) массив:

In [104]: np.cov(1.23,2.323)                                                                                               
/usr/local/bin/ipython3:1: RuntimeWarning: Degrees of freedom <= 0 for slice
  #!/usr/bin/python3
/usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py:2455: RuntimeWarning: divide by zero encountered in true_divide
  c *= np.true_divide(1, fact)
/usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py:2455: RuntimeWarning: invalid value encountered in multiply
  c *= np.true_divide(1, fact)
Out[104]: 
array([[nan, nan],
       [nan, nan]])

Этот массив нельзя назначить для beta[i].

Почему вы используете np.cov со скалярными аргументами. Это не имеет смысла.

0 голосов
/ 03 марта 2020

Эта ошибка возникает, когда вы пытаетесь присвоить элементу np.array что-то, что не совместимо с формой этого элемента. Например, присвоение элемента с формой (2, 2) элементу массива с формой (1,).

Теперь давайте рассмотрим формы. beta[i] является скаляром (форма ()), в то время как np.cov() возвращает ковариационную матрицу, по крайней мере, формы (1, 1), которая не совместима с beta[i], следовательно, вы получаете ошибку.

Вы должны переосмыслить формы ваших массивов, чтобы они соответствовали предполагаемым вычислениям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...