2016-12-04 1 views
1

Ich habe eine Testdatei und ein 100-Modell, die ich auf dem Test bewerten möchte.Wie an die richtige ID-Spalte in CSV mit Pandas anhängen?

In der Testdatei gibt es 2 Spalten, die erste ist IDs und die zweite ist Wahrscheinlichkeit.

Ich möchte, dass jedes Modell seine Bewertung an eine neue Spalte neben der entsprechenden ID anhängen würde.

Mein Code jetzt unter aufeinander aufbauen, wie folgt aus:

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

Und ich würde Form wie diese brauchen:

1 0.1 0.21 
2 0.12 0.22 
3 0.32 0.17 

in eine CSV.

Mein Code sieht wie folgt aus:

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

Bitte korrigieren Sie eine Einrückung: Einrückung aller Zeilen, aber zuerst muss erhöht werden. –

Antwort

0

Ich glaube, kann es ein bisschen leichter gemacht werden.

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) 
Verwandte Themen