我在创建训练和测试分割数据框时遇到问题。 在旋转和分组后,我的完整DF的形状为(1295,6835)。
这些数据的两个子集以相同的方式从同一个文件分成两个,包含功能(训练数据)和响应变量(我想要预测的数据)。
它们具有形状特征(1287,6631)和响应(1068,1977)。
这是明显的尺寸错过匹配,功能和响应应该与原始数据具有相同的6835。
如何用零填充这些序列,保留原始大小和列名,以便我可以验证这个?
import numpy as np
allData = pd.read_csv('path_tocsv.csv')
months = pd.read_csv('path_to_train_months.csv')
march = pd.read_csv('path_to_predictmonth.csv')
这给出了形状: 下一步转动数据:
df = pd.pivot_table(allData, values='Qty', columns='Item', index=['Subinventory Code'], fill_value=0.0)
df[df < 0 ] = 0
df1 = pd.pivot_table(months, values='Qty', columns='Item', index=['Subinventory Code'], fill_value=0.0)
df1[df1 < 0 ] = 0
df2 = pd.pivot_table(march, values='Qty', columns='Item', index=['Subinventory Code'], fill_value=0.0)
df2[df2 < 0 ] = 0
数据有形: df(1295,6835) df1(1287,6631) df2(1068,1977) 创建包含df
中每行概率的字典def getProbas(df, cols, train=True):
probasDict = dict()
if train == True:
for y,z in df.iterrows():
locSum = z.sum()
newZ = pd.Series([v/locSum for v in z])
probasDict[y] = newZ
else:
for y,z in df.iterrows():
newZ = pd.Series([v for v in z])
probasDict[y] = newZ
return probasDict
cols = list(df.columns)
fullDict = getProbas(df, cols, train=True)
trainDict = getProbas(df1, cols, train=True)
testDicts = getProbas(df2, cols, train=False)
这里我从dicts创建数据框。
dfAll = pd.DataFrame.from_items(fullDict.items(), orient = 'index', columns = cols)
dfTrain = pd.DataFrame.from_items(trainDict.items(), orient = 'index', columns = list(df1.columns))
dfTest = pd.DataFrame.from_items(testDict.items(), orient = 'index', columns = list(df2.columns))
此形状与之前相同: dfAll(1295,6835) dfTrain(1287,6631) dfTest(1068,1977)
我希望预测月份的观察量较少,但希望能够为所有观察结果提供灵活的模型。
所以我们的目标是拥有dfTrain和dfTest的形状(x,6835)
这有意义吗?