按21步切片单列日期索引DataFrame时遇slice无效键错误求助
解决DataFrame切片时的TypeError问题
嘿,我来帮你搞定这个报错问题!你遇到的TypeError是因为pandas DataFrame不支持直接用(slice, 整数)这种numpy风格的索引语法,得用pandas专门的位置索引方法.iloc来按行/列的位置取值。
先明确你的场景:你有一个以日期为索引、仅包含Close列的DataFrame,想要按21步滑动窗口切片,生成RNN训练用的x_train和y_train。
错误原因
原来的代码里df_d_train[i-step:i,0]试图直接用元组索引行和列,但pandas的默认索引逻辑不接受这种写法——如果要按位置(而非标签)访问行和列,必须用.iloc方法来实现。
修正后的代码
import numpy as np import pandas as pd step = 21 x_train = [] y_train = [] # 改用.iloc按位置访问行和列 for i in range(step, df_d_train.shape[0]): # 取前step行的第0列(Close列),转成numpy数组存入列表 x_train.append(df_d_train.iloc[i-step:i, 0].values) # 取第i行的第0列作为目标值 y_train.append(df_d_train.iloc[i, 0]) x_train, y_train = np.array(x_train), np.array(y_train) x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], 1) # 调整为RNN需要的三维格式 print("x_train shape= ", x_train.shape) print("y_train shape= ", y_train.shape)
额外说明
- 如果你的DataFrame列名固定是
Close,也可以用标签索引.loc来写,比如df_d_train.loc[df_d_train.index[i-step:i], 'Close'].values,但用.iloc按位置取更简洁,适合这种列数固定的场景。 - 加上
.values是为了直接获取numpy数组,避免把pandas Series放进列表后转数组时出现不必要的维度问题。
内容的提问来源于stack exchange,提问作者Stanislav Jirák
相关产品推荐
相关产品推荐

