AttributeError: у объекта 'numpy .float64' нет атрибута 'to_ numpy' - PullRequest
0 голосов
/ 25 апреля 2020

Я очень новичок в Python, и я не понимаю, почему возникает эта ошибка. Вот код, который я написал:

var_1 = pd.DataFrame({'Vcond':[], 'Rsquared':[]})

for j in clim :
    varj = Cmean.loc[j][j]
    varz = Cmean.loc['Zi']['Zi']
    covzj = Cmean.loc['Zi'][j]
    B = np.linalg.inv(varj.to_numpy())
    Vcondj = varz-covzj @ B @ covzj
    Rsquared = (varz - Vcondj)/varz 
    var_1.loc[j]={'Vcond': Vcondj, 'Rsquared': Rsquared}

print(var_1)

И ошибка:

AttributeError: 'numpy.float64' object has no attribute 'to_numpy'

Мой учитель сказал использовать .to_ numpy () таким образом, чтобы вычислить обратную матрицу, но это не похоже на работу. Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Для df кадра данных, который у меня есть от другого вопроса:

In [907]: type(df)                                                                                     
Out[907]: pandas.core.frame.DataFrame
In [908]: type(df.loc[1])                                                                              
Out[908]: pandas.core.series.Series
In [909]: type(df.loc[1][1])                                                                           
Out[909]: numpy.int64

Посмотрите, как последовательные loc шаги индексации дают Series, а затем числовое значение c.

Метод to_numpy в информационном фрейме создает массив 2d:

In [912]: df.to_numpy().shape                                                                          
Out[912]: (22, 2)

, примененный к серии, мы получаем массив 1d:

In [913]: df.loc[1].to_numpy()                                                                         
Out[913]: array([28, 13])

Но, как ваша ошибка показывает, вот и все. Объект np.float object does not have a to_ numpymethod. It already is a numpy`.

При написании подобного кода вы должны знать, какие объекты создает каждый шаг. И будьте готовы проверить это знание. Плохие догадки приводят к ошибкам.

0 голосов
/ 25 апреля 2020

varj, похоже, относится к типу numpy.float64, поэтому вы больше не можете преобразовать его в тип данных numpy. Поскольку вы упомянули, что вы хотите использовать to_numpy для инвертирования матрицы, вы, вероятно, хотите применить ее к вашему фрейму данных.

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