使用条件语句在矩阵中输入值会导致错误

时间:2018-10-18 19:16:46

标签: python matrix

我正在尝试根据一些条件语句将数据输入到矩阵中。我尝试过的一切都没有用,下面是一些代码:

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:只能将整数标量数组转换为标量索引

我也尝试if x_dates[x] == uniqueX[i]:导致 IndexError:用作索引的数组必须为整数(或布尔值)类型

也尝试过

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

这会导致 TypeError:列表索引必须是整数或切片,而不是numpy.float64

1 个答案:

答案 0 :(得分:0)

我认为您想这样做:

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]