通过添加0值为

时间:2016-04-27 15:36:54

标签: python pandas

我在创建训练和测试分割数据框时遇到问题。 在旋转和分组后,我的完整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)

这有意义吗?

0 个答案:

没有答案