传递值的形状是(1,20),指数暗示(37,20)

时间:2017-06-21 10:08:52

标签: python scikit-learn xgboost

frame = []
for i in range(1,21):
    frame.append(sampler(i))         
 # sampler is a function which return an array of 764*36

header = ['Act_High', 'Act_Low', 'Act_Avg', 'Precip_Amt', 'Festival_Impact',
       'Val_Share', 'Variable_Disc___ValueOff__Rs',
       'Non_Discounted_Gross_Revenue__Rs__', 'Fixed_Disc___ValueOff__Rs',
       'Total_Volume__No__', 'unitMrp', 'Variable_Disc___PerOff__Rs',
       'Fixed_Disc___FOC__Rs', 'Variable_Disc___FOC__Rs',
       'Fixed_Disc___PerOff__Rs', 'Total_Volume__No__rmean',
       'Non_Discounted_Gross_Revenue__Rs__rmean', 'Total_Volume__No__rmax',
       'Non_Discounted_Gross_Revenue__Rs__rmax', 'Total_Volume__No__rmin',
       'Non_Discounted_Gross_Revenue__Rs__rmin', 'Total_Volume__No__rstd',
       'Non_Discounted_Gross_Revenue__Rs__rstd', 'Total_Volume__No__rymean',
       'Non_Discounted_Gross_Revenue__Rs__rymean', 'Apr', 'Aug', 'Dec',
       'Feb', 'Jan', 'Jul', 'Jun', 'Mar', 'May', 'Nov', 'Oct', 'Sep']


frame = np.nan_to_num(frame)
frame = pd.DataFrame(frame, columns = header)





ValueError: Shape of passed values is (1, 20), indices imply (37, 20)

1 个答案:

答案 0 :(得分:0)

好的,嗨。

我正在尝试重建您的环境以帮助您解决问题。我希望我理解正确sampler(i=1)从第一个位置返回一个数组,形状为(767,37)。

让我们做出所有这些虚拟功能:

def sampler(i):
 a = np.empty((21, 764, 36))
 return a[i]

所以,如果我定义sampler(i=1).shape,它会返回一个形状的数组(767,37)!

然后,如果我附加一个名为 frame 的列表,其中包含20个数组(就像在循环中一样),它仍然是一个不合适的DataFrame的1-d输入,因为{{1需要2-d输入。您的既不是三维输入也不是二维输入,因为它是ValueError状态。

让我们考虑一个例子:

pd.DataFrame(data=data, ...)

它将创建一个DataFrame,其中每个列都相应地标记。但是,在您的情况下,您尝试标记20个框架元素,这也是一维列表,带有37个标签。

  

您可以运行以下命令来解决我认为的问题:

a = sampler(i=1)
a.shape  # (767, 37)
b = pd.DataFrame(data=a, columns=header)

我不确定它是否会有所帮助,因为我不知道你想要通过附加框架列表获得什么。 如果你对问题进行了更全面的阐述,也许我可以提供帮助。

电子。