“ IndexError:.iloc需要数字索引器,在python中得到[array[False,False,False,...”为什么会失败?

问题描述

我正在与金融机器学习高级课程的实施合作,以获取Python中交叉验证的分数。我的代码是下一个代码

 computedModelMatrix(Cartesian3: any,attitude: any,length: any) {
        //锥体距离卫星的高度
        let oldLength = length / 2;
        let centerCartesian3 = new Cesium.Cartesian3(Cartesian3.x,Cartesian3.y,Cartesian3.z);
        let oldX = 0,oldY = 0,oldZ = -oldLength,newX = 0,newY = 0,newZ = 0;
        let heading = attitude.heading;
        //规定顺时针为正旋转,正东方向为0度
        if (heading < 0) {
            heading = heading + 360;
        }
        let roll = attitude.roll;
        let pitch = attitude.pitch;
        let headingradians = Cesium.Math.toradians(heading);
        let pitchradians = Cesium.Math.toradians(pitch);
        let rollradians = Cesium.Math.toradians(roll);
        let hpr = new Cesium.headingPitchRoll(headingradians,pitchradians,rollradians);
        let orientation = Cesium.Transforms.headingPitchRollQuaternion(centerCartesian3,hpr);
        //旋转roll
        newY = oldY + oldLength * Math.sin(rollradians);
        newZ = oldZ + oldLength - oldLength * Math.cos(rollradians);
        let pitchTouying = oldLength * Math.cos(rollradians);//进行pitch变化时在Y轴和Z轴组成的平面的投影
        //旋转pitch
        newX = oldX + pitchTouying * Math.sin(pitchradians);
        newZ = newZ + (pitchTouying - pitchTouying * Math.cos(pitchradians));
        if (heading != 0) {
            let headingTouying = Math.sqrt(Math.pow(Math.abs(newX),2) + Math.pow(Math.abs(newY),2));//进行heading变化时在Y轴和X轴组成的平面的投影
            //旋转heading
            let Xdeg = Cesium.Math.todegrees(Math.acos(Math.abs(newX) / Math.abs(headingTouying)));//现有投影线与X轴的夹角
            let newXdeg = 0;//旋转heading后与X轴的夹角
            let newXradians = 0;//旋转heading后与X轴的夹角弧度
            if (newX >= 0 && newY >= 0) {
                newXdeg = heading - Xdeg;
            } else if (newX > 0 && newY < 0) {
                newXdeg = heading + Xdeg;
            } else if (newX < 0 && newY > 0) {
                newXdeg = heading + (180 + Xdeg);
            } else {
                newXdeg = heading + (180 - Xdeg)
            }
            if (newXdeg >= 360) {
                newXdeg = 360 - newXdeg;
            }
            if (newXdeg >= 0 && newXdeg <= 90) {
                newXradians = Cesium.Math.toradians(newXdeg);
                newY = -headingTouying * Math.sin(newXradians);
                newX = headingTouying * Math.cos(newXradians);
            } else if (newXdeg > 90 && newXdeg <= 180) {
                newXradians = Cesium.Math.toradians(180 - newXdeg);
                newY = -headingTouying * Math.sin(newXradians);
                newX = -headingTouying * Math.cos(newXradians)
            } else if (newXdeg > 180 && newXdeg <= 270) {
                newXradians = Cesium.Math.toradians(newXdeg - 180);
                newY = headingTouying * Math.sin(newXradians);
                newX = -(headingTouying * Math.cos(newXradians))
            } else {
                newXradians = Cesium.Math.toradians(360 - newXdeg);
                newY = headingTouying * Math.sin(newXradians);
                newX = headingTouying * Math.cos(newXradians)
            }
        }
        let offset = new Cesium.Cartesian3(newX,newY,newZ);
        let newPosition = this.computeOffset(centerCartesian3,offset);
        return Cesium.Matrix4.fromTranslationQuaternionRotationScale(newPosition,orientation,new Cesium.Cartesian3(1,1,1))
    }
computeOffset(Cartesian3: any,offset: any) {
        let enuTransform = Cesium.Transforms.eastnorthUpToFixedFrame(Cartesian3);
        Cesium.Matrix4.multiplyByPointAsvector(enuTransform,offset,offset);
        return Cesium.Cartesian3.add(Cartesian3,new Cesium.Cartesian3());
    }

问题是,当我运行最后一个命令行时,出现下一个错误

cv = PurgedKFold(n_splits = 10,samples_info_sets = pd.Series(train['close_datetime'].values,index = train['opendatetime'].values),pct_embargo = 0.02)

scores = ml_cross_val_score(classifier = classifier,X = X,y = y,cv_gen = cv)

我的代码出了点问题,可能是我配置了X和y数据帧的格式错误,供交叉验证器检查。谁能帮助我理解为什么会出现该错误

解决方法

经过一些试验,我找到了解决方案。由于“清除的K折”需要索引值唯一,因此会发生此错误。如果存在两个相等的索引(“ opendatetime”),则在分割数据的不同分区时会引发错误。

解决方案是检查是否存在具有相同索引的行。如果您将这些相等事件的索引值更改为彼此不同,那么它将起作用!