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