Pandas小于或等于给出TypeError:无效的类型比较

时间:2017-06-10 17:15:05

标签: python pandas

根据我想要不断过滤我的Pandas数据框

,我有4个列表
categoryList=['Parameter1', 'Parameter1', 'Parameter2', 'Parameter2']
conditionList=['b1', 'b41', 'm1', 'm2']
conditionDescList=['>', 'btn', '<=', 'btn']
conditionParamList=['1000', '2:3', '0.5', '0.1:0.3']

现在我正在尝试使用以下代码根据df_custid_marker

过滤来自我的2个数据框(df_custid_bpcategoryList)的行
        k =0
        for i in conditionDescList:
            if(categoryList[k]=='Parameter1'):
                if(i=='btn'):
                    arrValues=conditionParamList[k].split(":")
                    minVal=arrValues[0]
                    maxVal=arrValues[1]
                    df_custid_marker=df_custid_marker[(df_custid_marker[conditionList[k]] > minVal) & (df_custid_marker[conditionList[k]] < maxVal)]
                elif(i=='>'):
                    df_custid_marker=df_custid_marker[(df_custid_marker[conditionList[k]] > conditionParamList[k])]
                elif(i=='<'):
                    df_custid_marker=df_custid_marker[(df_custid_marker[conditionList[k]] < conditionParamList[k])]
                elif(i=='<='):
                    df_custid_marker=df_custid_marker[(df_custid_marker[conditionList[k]] < conditionParamList[k]) | (df_custid_marker[conditionList[k]] == conditionParamList[k])]
                elif(i=='>='):
                    df_custid_marker=df_custid_marker[(df_custid_marker[conditionList[k]] > conditionParamList[k]) | (df_custid_marker[conditionList[k]] == conditionParamList[k])]
                else:
                    df_custid_marker=df_custid_marker[(df_custid_marker[conditionList[k]] == conditionParamList[k])]
            k+=1


        k =0
        for i in conditionDescList:
            if(categoryList[k]=='Parameter2'):
                if(i=='btn'):
                    arrValues=conditionParamList[k].split(":")
                    minVal=arrValues[0]
                    maxVal=arrValues[1]
                    df_custid_bp=df_custid_bp[(df_custid_bp[conditionList[k]] > minVal) & (df_custid_bp[conditionList[k]] < maxVal)]
                elif(i=='>'):
                    df_custid_bp=df_custid_bp[(df_custid_bp[conditionList[k]] > conditionParamList[k])]
                elif(i=='<'):
                    df_custid_bp=df_custid_bp[(df_custid_bp[conditionList[k]] < conditionParamList[k])]
                elif(i=='<='):
                    df_custid_bp=df_custid_bp[(df_custid_bp[conditionList[k]] < conditionParamList[k]) | (df_custid_bp[conditionList[k]] == conditionParamList[k])]
                elif(i=='>='):
                    df_custid_bp=df_custid_bp[(df_custid_bp[conditionList[k]] > conditionParamList[k]) | (df_custid_bp[conditionList[k]] == conditionParamList[k])]
                else:
                    df_custid_bp=df_custid_bp[(df_custid_bp[conditionList[k]] == conditionParamList[k])]
            k+=1

现在我收到<= df_custid_marker=df_custid_marker[(df_custid_marker[conditionList[k]] < conditionParamList[k]) | (df_custid_marker[conditionList[k]] == conditionParamList[k])]

的错误

raise TypeError("invalid type comparison")

1 个答案:

答案 0 :(得分:1)

问题是数据框列类型为string,列表为 else if (function == "transfer") { myDataAdapter.SelectCommand = new MySqlCommand("select * from test.auth where id = '" + Int32.Parse(materialSingleLineTextField3.Text) + "' ;", myConn); MySqlDataReader reader = myDataAdapter.SelectCommand.ExecuteReader(); Int32 count = 0; while (reader.Read()) { count += 1; } if (count == 1) { myDataAdapter.SelectCommand = new MySqlCommand("update test.auth SET bits = bits + '" + double.Parse(materialSingleLineTextField4.Text) + "' where id = '" + Int32.Parse(materialSingleLineTextField3.Text) + "' ;", myConn); materialFlatButton6.Text = "Bits have been transferred!"; } else { materialFlatButton6.Text = "No Token was found!"; } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); }

相关问题