Входные значения в матрице с использованием условных операторов, приводящих к ошибкам

Я пытаюсь ввести данные в матрицу на основе некоторых условных операторов. Ничто из того, что я пробовал, работает, вот какой код:

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 который равен тому же времени года, но в следующем году. Я хочу видеть уникальные таймфреймы на каждый год, так, например, я хочу видеть продажи каждый год в течение последних 10 лет с 19-го дня. Для этого я сделал следующий код:

    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 ответ


Я думаю, вы хотели сделать так:

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] 

Есть идеи?

10000