首页 > 解决方案 > 使用条件语句在矩阵中输入值导致错误

问题描述

我正在尝试根据一些条件语句将数据输入到矩阵中。我尝试过的没有任何工作,这里有一些代码:

dataframe = pd.read_csv("C:/Users/Thomas/ML/p39_time_series.csv")
df_array = dataframe.values

x_dates = df_array[:,4:5] # contains dates
y_sales = df_array[:,1]
list(zip(x_dates, y_sales)) [0:15]

为此输出:

[(array([2007.]), 0.0),
 (array([2007.01923077]), 0.0),
 (array([2007.03846154]), 0.0),
 (array([2007.05769231]), 0.0),
 (array([2007.07692308]), 0.0),
 (array([2007.09615385]), 0.0),
 (array([2007.11538462]), 0.0),
 (array([2007.13461538]), 0.0),
 (array([2007.15384615]), 311.0),
 (array([2007.17307692]), 3664.0),
 (array([2007.19230769]), 7942.0),
 (array([2007.21153846]), 186.0),
 (array([2007.23076923]), 10830.0),
 (array([2007.25]), 8589.0),
 (array([2007.26923077]), 7844.0)]

每个“x_dates”元素相隔 19 天。所以一年我们有日期2007.01923077,明年我们有输出2008.01923077,它等于一年中的同一时间,但明年。我想查看每年的独特时间框架,例如,我想查看从第 19 天开始的过去 10 年中每年的销售额。为此,我制作了以下代码:

    minusNumber = 2007

for x in range(x_dates.size):
    print(x_dates[x] - minusNumber)
    if x_dates[x] - minusNumber >= 1.0:
        minusNumber +=1
        x_dates[x] = x_dates[x] - minusNumber

    else:
        x_dates[x] = x_dates[x] - minusNumber



print(x_dates)

示例输出:

[0.]
[0.01923077]
[0.03846154]
[0.05769231]
[0.07692308]
[0.09615385]
[0.11538462]
[0.13461538]
[0.15384615]
[0.17307692]
[0.19230769] # (....)

因此,由于数据被分成每周数据,我有 52 个独特的元素。我有 10 年的销售数据。我想要一个 52 行 10 列的矩阵来输入所有 520 个数据点:

uniqueX = numpy.unique(x_dates)
sales, week = 10, 52;
Matrix = [[0 for x in range(sales)] for y in range(week)] 

这是不起作用的代码:

for x in x_dates:

    for i in uniqueX:
        if x_dates.item(x) == uniqueX[i]:

            #sales = 10.
            for q in range(sales):
                if Matrix[i][q] != 0:
                    Matrix[i][q] = y_sales[x] #Equal same temperature at the current index.

这导致TypeError: only integer scalar arrays can be convert to a scalar index

我也在 IndexError 中尝试if x_dates[x] == uniqueX[i]:了这个结果:用作索引的数组必须是整数(或布尔)类型

也试过这个

if x_dates.item(1) == uniqueX[1]:

这会导致TypeError: list indices must be integers or slices, not numpy.float64

标签: pythonmatrix

解决方案


我想你想这样做:

for x in range (x_dates.size):

for i in range (uniqueX.size):
    if x_dates.item(x) == uniqueX[i]:

        #sales = 10.
        for q in range(sales):
            if Matrix[i][q] != 0:
                Matrix[i][q] = y_sales[x] 

推荐阅读