使用for循环将数据帧连接到更大的数据帧

时间:2014-07-18 16:20:17

标签: python pandas

我的问题是for循环的每一步,都会生成一个新的数据帧。我想将数据帧连接在一起以获得更大的数据框但不知何故我的函数只会返回结果的最后一步而不是合并的结果

def crossV(clf,data,n):
    cvResult=pd.DataFrame()
    for i in range(n+2)[2:]:
        cvResult=pd.DataFrame()
        tt=array(tuple(x[1:i] for x in data))
        qq=array(tuple(x[0] for x in data))
        recall_rate=cross_validation.cross_val_score(clf, tt, qq, cv=10,scoring='recall')*100
        precision_rate=cross_validation.cross_val_score(clf, tt, qq, cv=10,scoring='precision')*100
        accuracy_rate=cross_validation.cross_val_score(clf, tt, qq, cv=10,scoring='accuracy')*100
        index_i=Series(np.repeat(i-1,10))
        classifier_i=Series(np.repeat(str(clf)[:7],10))
        recall_rate=Series(recall_rate)
        precision_rate=Series(precision_rate)
        accuracy_rate=Series(accuracy_rate)
        rate={"classfier":classifier_i,"model":index_i,"recall":recall_rate,"precision":precision_rate,"accuracy":accuracy_rate}
        result=pd.concat(rate,axis=1)
    cvResult=cvResult.append(result)
    return(cvResult)

谢谢!

1 个答案:

答案 0 :(得分:1)

这可能不是正确的答案,它作为答案更具可读性。

我认为正确的逻辑应该是(但我可能非常错误):

def crossV(clf,data,n):
    cvResult=pd.DataFrame() #create an empty DF here. 
    for i in range(n+2)[2:]:
        # cvResult=pd.DataFrame() -- remove this line. 
        tt=array(tuple(x[1:i] for x in data))
        qq=array(tuple(x[0] for x in data))
        recall_rate=cross_validation.cross_val_score(clf, tt, qq, cv=10,scoring='recall')*100
        precision_rate=cross_validation.cross_val_score(clf, tt, qq, cv=10,scoring='precision')*100
        accuracy_rate=cross_validation.cross_val_score(clf, tt, qq, cv=10,scoring='accuracy')*100
        index_i=Series(np.repeat(i-1,10))
        classifier_i=Series(np.repeat(str(clf)[:7],10))
        recall_rate=Series(recall_rate)
        precision_rate=Series(precision_rate)
        accuracy_rate=Series(accuracy_rate)
        rate={"classfier":classifier_i,"model":index_i,"recall":recall_rate,"precision":precision_rate,"accuracy":accuracy_rate}
        # result=pd.concat(rate,axis=1) --remove this line as well. 
        # I think you don't need the "result" variable. 

        # move this line inside and make a little change:
        #cvResult=cvResult.append(result) 
        cvResult = pd.concat([cvResult, rate], ignore_index=True)
    return(cvResult)

请您试试这个,如果有效,请告诉我们? 我认为您的问题之一就是使用pd.concat(obj)的方式,obj应该是项目列表或pd.Series的字典.... 但你没有与其他任何东西联系。 并且我不需要使用变量“结果”。 但是,再次,我可能是错的。