2016-07-15 1 views
0

이전에 매우 수동이었던 코드를 리팩터링하려고 시도했고 생성 된 각각의 새 데이터 프레임에 대한 색인을 설정하여 본질적으로 원하는 출력을 만들었습니다 :미리 설정된 행 이름을 사용하여 팬터 데이터 프레임에 연결하기 python

Traceback (most recent call last): 
    File "/Users/dhruv/Documents/bla/bla/src/main/bla.py", line 419, in <module> 
    summaryDF = pd.DataFrame().set_index(['A','B','C','D']) 
    File "/Users/dhruv/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 2607, in set_index 
    level = frame[col].values 
    File "/Users/dhruv/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 1797, in __getitem__ 
    return self._getitem_column(key) 
    File "/Users/dhruv/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 1804, in _getitem_column 
    return self._get_item_cache(key) 
    File "/Users/dhruv/anaconda/lib/python2.7/site-packages/pandas/core/generic.py", line 1084, in _get_item_cache 
    values = self._data.get(item) 
    File "/Users/dhruv/anaconda/lib/python2.7/site-packages/pandas/core/internals.py", line 2851, in get 
    loc = self.items.get_loc(item) 
    File "/Users/dhruv/anaconda/lib/python2.7/site-packages/pandas/core/index.py", line 1572, in get_loc 
    return self._engine.get_loc(_values_from_object(key)) 
    File "pandas/index.pyx", line 134, in pandas.index.IndexEngine.get_loc (pandas/index.c:3824) 
    File "pandas/index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas/index.c:3704) 
    File "pandas/hashtable.pyx", line 686, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12280) 
    File "pandas/hashtable.pyx", line 694, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12231) 
KeyError: 'A' 
,369 : 여기
summaryDF = pd.DataFrame().set_index(['A','B','C','D']) 

def evaluation(trueLabels, evalLabels): 

    precision = precision_score(trueLabels, evalLabels) 
    recall = precision_score(trueLabels, evalLabels) 
    f1 = precision_score(trueLabels, evalLabels) 
    accuracy = accuracy_score(trueLabels, evalLabels) 

    data = {'precision': precision, 
       'recall': recall, 
       'f1': f1} 

    DF = pd.DataFrame(data) 

    summaryDF.concat(DF,ignore_index=True) 


results = [y_randpred,y_cat_random_to_binary,y_cat_random_to_binary_threshold,y_closed_random_to_binary] 

for result in results: 
    evaluation(y_true_claim, result) 

내 오류 추적입니다 : 여기
f1   precision recall 
A 0.600315956 0.72243346 0.513513514 
B 0.096692112 0.826086957 0.051351351 
C 0.085642317 0.62962963 0.045945946 
D 0.108641975 0.628571429 0.059459459 

내 현재 코드입니다

내가 뭘 잘못하고 있는거야?

답변

0

내 문제가 해결되었습니다. this answer 사용

, 내 코드가된다 :

summaryDF = pd.DataFrame(columns=('precision','recall','f1')) 

def evaluation(trueLabels, evalLabels): 

    global summaryDF 

    precision = precision_score(trueLabels, evalLabels) 
    recall = recall_score(trueLabels, evalLabels) 
    f1 = f1_score(trueLabels, evalLabels) 

    data = {'precision': [precision], 
       'recall': [recall], 
       'f1': [f1] 
      } 

    DF = pd.DataFrame(data) 

    summaryDF = pd.concat([summaryDF,DF]) 

results = [y_randpred, 
      y_cat_random_to_binary, 
      y_cat_random_to_binary_threshold, 
      y_closed_random_to_binary, 
      y_closedCat_random_to_binary_threshold] 

for result in results: 
    evaluation(y_true_claim, result) 

summaryDF.index=list(['A', 
        'B', 
        'C', 
        'D', 
        'E']) 

주요 측면은 내가 정밀, 리콜 및 F1에 대한 대괄호의 요소를 배치 할 필요가 있으며, 또한 set_index 대신 summaryDF.index를 통해 나중에 인덱스를 설정 방법.

그래서 모든 시작된 데이터 프레임에 일종의 시작 부분에 인덱스가 있어야하기 때문에 데이터 프레임을 추가하는 대신 인덱스를 끝에 추가합니다.

관련 문제