使用for循环将dataframe连接到更大的datafram

2024-03-28 14:12:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是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)

谢谢!你知道吗


Tags: 数据infordatarateprecisionseriespd
1条回答
网友
1楼 · 发布于 2024-03-28 14:12:09

这可能不是正确的答案,它更可读写的答案。你知道吗

我认为正确的逻辑应该是(但我可能大错特错):

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系列.... 但你没有和其他任何东西联系。 我不需要使用变量“result”。 但是,我可能又错了。你知道吗

相关问题 更多 >