我正在尝试将时间序列数据分为训练和测试集。但是我在运行代码时得到Key Error :1
:
def prepare_data(data, lags=1):
X, y = [], []
for row in range(len(data) - lags - 1):
a = data[row:(row + lags), 0]
X.append(a)
y.append(data[row + lags, 0])
return np.array(X), np.array(y)
# prepare the data
lags = 1
X_train, y_train = prepare_data(train, lags)
X_test, y_test = prepare_data(test, lags)
y_true = y_test # due to naming convention
错误消息:
KeyError跟踪(最近的呼叫 持续) C:\ ProgramData \ Anacondaa3 \ envs \ tf \ lib \ site-packages \ pandas \ core \ indexes \ base.py 在get_loc(self,key,method,tolerance)2656中尝试: -> 2657返回self._engine.get_loc(key)2658,除了KeyError:
pandas._libs.index.IndexEngine.get_loc()中的pandas / _libs / index.pyx
pandas._libs.index.IndexEngine.get_loc()中的pandas / _libs / index.pyx
pandas / _libs / hashtable_class_helper.pxi在 pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas / _libs / hashtable_class_helper.pxi在 pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError:1
在处理上述异常期间,发生了另一个异常:
KeyError跟踪(最近的呼叫 最后) 1#准备数据 2滞后= 1 ----> 3 X_train,y_train = prepare_data(火车,滞后) 4 X_test,y_test = prepare_data(测试,滞后) 5 y_true = y_test#由于命名约定
prepare_data中的(数据,滞后) 4 a =数据[行:(行+滞后)] 5 X.append(a) ----> 6 y.append(data [row + lags]) 7返回np.array(X),np.array(y) 8
C:\ ProgramData \ Anacondaa3 \ envs \ tf \ lib \ site-packages \ pandas \ core \ frame.py 如果是self.columns.nlevels,则在 getitem ((自我,密钥)中)2925
1:2926返回self._getitem_multilevel(key) -> 2927 indexer = self.columns.get_loc(key)2928 if is_integer(indexer):2929 indexer = [indexer]
C:\ ProgramData \ Anacondaa3 \ envs \ tf \ lib \ site-packages \ pandas \ core \ indexes \ base.py 在get_loc(自身,键,方法,公差)中2657
pandas._libs.index.IndexEngine.get_loc()中的
返回self._engine.get_loc(key)2658,但KeyError除外: -> 2659返回self._engine.get_loc(self._maybe_cast_indexer(key))2660
索引器= self.get_indexer([键],方法=方法,公差=公差) 2661如果indexer.ndim> 1或indexer.size> 1:pandas / _libs / index.pyx
pandas._libs.index.IndexEngine.get_loc()中的pandas / _libs / index.pyx
pandas / _libs / hashtable_class_helper.pxi在 pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas / _libs / hashtable_class_helper.pxi在 pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError:1
答案 0 :(得分:0)
我猜您的索引错误出现了,因为您使用了数据框的索引,但是看来您真正想要的是基于位置进行访问。
如果以下代码更改可解决此问题,请尝试
def prepare_data(data, lags=1):
X, y = [], []
index_of_y_column= 0 # change this if necessary
indexes_of_x_columns= [i for i in range(data.shape[1]) if i != index_of_y_column]
for row in range(len(data) - lags - 1):
a = data.iloc[(row + lags): indexes_of_x_columns]
X.append(a)
y.append(data.iloc[row + lags, index_of_y_column])
return np.array(X), np.array(y)
顺便说一句,如果您只想移位一列或多列或整个数据帧(在最后一种情况下,所有数据都相对于索引移位),则也可以使用shift()
方法。
例如data.shift(1)
将使整个数据帧移动一行。
data['targetcol_shifted']= data['targetcol'].shift(-1)
将使用存储在下一行中的值targetcol_shifted
填充新列targetcol
。如果您可以使用shift()
,我建议您使用它,因为它比手工完成要快得多。