构造Pandas DataFrame遇维度不匹配报错,求解决方案
解决Shape不匹配的报错问题
首先,咱们先拆解你遇到的报错:Shape of passed values is (3514, 78), indices imply (1, 78),这句话的意思是:你传入的数据是3514行78列的结构,但你指定的列数只有1列,两者无法匹配,所以报错了。
问题出在你的代码里这两处:
columns['close']是语法错误,正确的列指定应该是columns=['close'](方括号外面要加等号);- 更关键的是:
np.zeros_like(close)会生成一个和close完全同形状的数组——从你的示例能看到close是包含多列股票代码的DataFrame,所以这个数组是3514行×78列的,但你指定的columns=['close']只有1列,这就导致了形状冲突。
针对你的需求,分两种修复方案:
方案1:生成和close同结构(同索引、同列名)的全0DataFrame
如果你想得到一个和close完全一样的索引、列名,只是值全为0的DataFrame,直接复用close的columns即可,不需要手动指定:
alpha = pd.DataFrame(np.zeros_like(close), index=close.index, columns=close.columns)
方案2:只生成一列名为close的全0DataFrame
如果你确实只需要一列,那就要调整生成的全0数组的形状,让它变成3514行×1列:
# 方法1:指定数组形状 alpha = pd.DataFrame(np.zeros((len(close), 1)), index=close.index, columns=['close']) # 方法2:更简洁的字典构造法 alpha = pd.DataFrame({'close': np.zeros(len(close))}, index=close.index)
关于你猜测的多重索引问题
从你给出的close数据示例来看,它并不是多重索引:你的close的index是单索引trade_dt,列是不同的股票代码,所以和多重索引无关,核心问题就是列数和数据形状不匹配~
内容的提问来源于stack exchange,提问作者xxyao
相关产品推荐
相关产品推荐

