【问题标题】:Shape of passed values is (1, 20), indices imply (37, 20)传递值的形状是 (1, 20),索引意味着 (37, 20)
【发布时间】:2017-06-21 10:08:51
【问题描述】:
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)

【问题讨论】:

  • 采样器是做什么的?
  • sampler 确实能做到你认为的那样吗? for 循环后的框架是什么样的?
  • sampler(1).shape -> (767, 37)
  • 问题是我认为它正在创建 3d 数组,我需要将其转换为 2d .. 但我不知道该怎么做

标签: python scikit-learn xgboost


【解决方案1】:

好的,你好。

我正在尝试重建您的环境以帮助您解决问题。我希望我理解正确,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 的一维输入,这是不合适的,因为 pd.DataFrame(data=data, ...)需要二维输入。您的 frame 既不是 3-d 输入也不是 2-d 输入,因为 ValueError 状态。

让我们考虑一个例子:

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

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

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

frame = np.nan_to_num(frame)
frame = np.array(frame)
frame = np.reshape(-1, 37)
frame = pd.DataFrame(frame, columns=header)

我不完全确定它是否会有所帮助,因为我不知道您真正想从附加该 frame 列表中得到什么。 如果您对您的问题进行更详尽的阐述,也许我可以提供帮助。

E.

【讨论】:

    猜你喜欢
    • 2022-07-08
    • 2023-03-12
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2019-08-25
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多