我有一个简单的问题,我不明白为什么会这样。我正在读取两个矩阵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
数组还是其他问题,因为我检查了this和that之类的答案,但是我无法解决。
答案 0 :(得分:1)
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