我正在尝试根据一些条件语句将数据输入到矩阵中。我尝试过的一切都没有用,下面是一些代码:
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
答案 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]