Добавить результат функции в фрейм данных - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь присвоить значения, зависящие от цикла, для фрейма данных в python.

У меня есть следующий стартовый фрейм данных:

thres = 0.1
d = { 'T': [0.], 'TN': [0], 'FN': [0], 'FP':[0], 'TP':[0]}
dataframef = pd.DataFrame(data=d)

с моим начальным varialbe thres.

Теперь я вхожу в свой цикл:

while thres <= 0.4:
    a = { 'T': [0], 'TN': [0], 'FN': [0], 'FP':[0], 'TP':[0]}
    dataframe = pd.DataFrame(data=a)
    y_pred = predictionthreshold(RandomForestClassifier(random_state=42), thres)
    tn, fp, fn, tp = confusion_matrix(y_test.ravel(), y_pred).ravel()
    dataframe.loc[0]['T'] = thres
    dataframe.loc[0]['TN'] = tn
    dataframe.loc[0]['FP'] = fp
    dataframe.loc[0]['FN'] = fn
    dataframe.loc[0]['TP'] = tp    
    dataframef = dataframef.append(dataframe, ignore_index=True)
    thres=thres+0.1

Мой результат:

    T   TN  FN  FP  TP
0   0.0     0   0   0   0
1   0.0     0   0   0   0
2   0.0     0   0   0   0
3   0.0     0   0   0   0
4   0.0     0   0   0   0

Я ожидал чего-то, что шаг за шагом заполняет фрейм данных:

    T   TN  FN  FP  TP
0   0.1     1   0   0   0
1   0.2     0   3   0   0
2   0.3     0   0   2   0
3   0.4     0   0   0   0
4   0.5     0   4   0   4 

Где в этом ошибка?и есть ли элегантный способ избежать петли?

1 Ответ

1 голос
/ 10 июля 2019

Измените назначения следующим образом:

dataframe.loc[0,'T'] = thres
dataframe.loc[0,'TN'] = tn
dataframe.loc[0,'FP'] = fp
dataframe.loc[0,'FN'] = fn
dataframe.loc[0,'TP'] = tp 

При использовании dataframe.loc[0]['TP'] = tp вы присваиваете tp копии, а не исходному кадру данных. Подробнее см. Возвращение вида вместо копии .

...