Как решить проблему "преобразовать серию в <class 'float'>" в Pandas? - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть простой вопрос, который я не мог понять, почему это так для меня.Я читаю две матрицы A и B (которые имеют размер 24 * 20), вычисляю их матрицу вычитания и сохраняю их, затем вычисляю MAPE (средняя абсолютная ошибка в процентах) .Проблема в том, что когда я читаю их через Pandas и применяю следующую формулу к матрице вычитания:

Я получаю эту формулу для каждого столбца как 'series':

0     2.252708
1     1.727362
2     1.928928
3     1.562168
4     2.015080
5     2.760333
6     1.497950
7     1.047574
8     1.078431
9     1.065895
10    1.159555
11    0.937553
12   -0.130836
13   -0.090051
14    0.919025
15    0.094861
16    0.839204
17   -0.880221
18   -1.571482
19   -0.400643
dtype: float64

в то время как через Numpy у меня есть только один правильный ответ.

17.813396179645633

Ниже приведен мой код:

# Import and call the needed libraries
import numpy as np
import pandas as pd

#A = np.zeros((24,20))
#B = np.zeros((24,20))

A = pd.read_csv('D:\A.csv', header=None)
B = pd.read_csv('D:\B.csv', header=None)

#A = np.loadtxt('D:\A.csv', delimiter=',' )
#B = np.loadtxt('D:\B.csv', delimiter=',' )

delta1a = A - B


df_delta1a = pd.DataFrame(delta1a, index=None)
df_delta1a.to_csv(f'Subtraction_Matrix_1a_.csv', na_rep='nan', encoding='utf-8', index=False)


#MAPE formula
mape_plot_1a = 100 *( 1 - np.abs( ( delta1a) / A) )
mape_1a = 100 *( np.sum( 1 - np.abs( delta1a / A) ) )/480
print(mape_1a)
mape_percentage_1a = ("%.2f%%" % mape_1a)

Так, как я могу читать матрицы с помощью Pandas и получать права?уникальный результат после применения формулы?почему Pandas возвращает 'series' и, следовательно, я сталкиваюсь со следующей ошибкой:

TypeError: cannot convert the series to <class 'float'>

Мне интересно, конвертируется ли мой случай из массивов Pandas в Numpy или другую проблему, поскольку я проверилесть некоторые ответы, такие как , и , , но я не могу это исправить.

1 Ответ

1 голос
/ 21 апреля 2019

pandas работает скорее со строками или столбцами, а не с матрицей.

Но вы можете суммировать значения в вашем Series, чтобы получить ожидаемое значение

Я взял ваши значения, но они могутбыть немного округленным (панды отображают мало округленные значения), поэтому результат будет немного другим.

import pandas as pd

data = pd.Series([2.252708, 1.727362, 1.928928, 1.562168, 2.01508, 2.760333, 1.49795, 1.047574, 1.078431, 1.065895, 1.159555, 0.937553, -0.130836, -0.090051, 0.919025, 0.094861, 0.839204, -0.880221, -1.571482, -0.400643])

print(data.sum())

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