2016-12-04 46 views
1

我有一個測試文件和100個模型,我想在測試中評估。如何使用熊貓將CSV追加到正確的ID列中?

在測試文件中有2列,第一個是ID,第二個是概率。

我希望每個模型都會將其評估附加到相關ID旁邊的新列。

我的代碼,現在它建立在對方,像這樣:

1 0.1 
2 0.12 
3 0.32 
1 0.21 
2 0.22 
3 0.17 

而且我需要的形式是這樣的:

1 0.1 0.21 
2 0.12 0.22 
3 0.32 0.17 

爲csv。

我的代碼如下所示:

for chunk in pd.read_csv('test_numeric_out.csv', chunksize=10000): 
chunk = chunk.drop(chunk.columns[len(chunk.columns)-1], axis=1) 
for model in models: 
    X_test = chunk.drop(['Id'],axis=1) 
    inputnames = X_test.columns.values 
    X_test['p_0']=0 
    X_test['p_1']=0 
    X_test[ ['p_0','p_1'] ] = model.predict_proba(X_test[inputnames]) 
    submission = pd.DataFrame({ 
     "Id":chunk['Id'], 
     "Response":X_test['p_1'] 
     }) 
    if (head==0): 
     submission.to_csv(proba_out_csv, 
     index=False, 
     header=True, 
     mode='a', 
     chunksize=100000) 
    else: 
     submission.to_csv(proba_out_csv, 
     index=False, 
     header=False, 
     mode='a', 
     chunksize=100000) 
    head = 1 
+0

請修正縮進:縮進所有行,但首先必須增加。 –

回答

0

我相信這是可以做到更容易一點。

inputnames = chunk.columns.drop('Id').values 
# drop works here too, so no need to create additional dataframe 
# to get inputnames 
for i, model in enumerate(models): 
    chunk['p_1_{}'.format(i)] = model.predict_proba(chunk[inputnames])[:, 1] 
    # we are interested only in the second column 
    # do not need to create different dataframe to store results 
    # just create distinct column for each model 
chunk.to_csv(proba_out_csv)