Python 值的隔离林长度与索引的长度不匹配

Python 值的隔离林长度与索引的长度不匹配,python,pandas,csv,machine-learning,jupyter-notebook,Python,Pandas,Csv,Machine Learning,Jupyter Notebook,我正在运行隔离林,试图将其应用于10049972行x 19列数据库,但运行2小时后,我出现以下错误。我真的不明白为什么我会得到它,也不知道我该如何解决它 代码: 错误是: ValueError Traceback (most recent call last) <ipython-input-1-fc55c8b1f328> in <module> 16 17 ---> 18 df

我正在运行隔离林,试图将其应用于10049972行x 19列数据库,但运行2小时后,我出现以下错误。我真的不明白为什么我会得到它,也不知道我该如何解决它

代码:

错误是:


 ValueError                                Traceback (most recent call last)
<ipython-input-1-fc55c8b1f328> in <module>
     16 
     17 
---> 18 df['anomaly'] = iForest.fit_predict(df.values.reshape(-1,1))
     19 
     20 

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in __setitem__(self, key, value)
   3368         else:
   3369             # set column
-> 3370             self._set_item(key, value)
   3371 
   3372     def _setitem_slice(self, key, value):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in _set_item(self, key, value)
   3443 
   3444         self._ensure_valid_index(value)
-> 3445         value = self._sanitize_column(key, value)
   3446         NDFrame._set_item(self, key, value)
   3447 

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in _sanitize_column(self, key, value, broadcast)
   3628 
   3629             # turn me into an ndarray
-> 3630             value = sanitize_index(value, self.index, copy=False)
   3631             if not isinstance(value, (np.ndarray, Index)):
   3632                 if isinstance(value, list) and len(value) > 0:

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\construction.py in sanitize_index(data, index, copy)
    517 
    518     if len(data) != len(index):
--> 519         raise ValueError('Length of values does not match length of index')
    520 
    521     if isinstance(data, ABCIndexClass) and not copy:

ValueError: Length of values does not match length of index 

ValueError回溯(最近一次调用上次)
在里面
16
17
--->18 df['normal']=iForest.fit_predict(df.values.reformate(-1,1))
19
20
C:\ProgramData\Anaconda3\lib\site packages\pandas\core\frame.py in\uuuuuuu setitem\uuuuuuuuu(self、key、value)
3368其他:
3369#设置列
->3370自我设置项目(键、值)
3371
3372 def_设置项_切片(自身、键、值):
C:\ProgramData\Anaconda3\lib\site packages\pandas\core\frame.py in\u set\u项(self、key、value)
3443
3444自我确保有效索引(值)
->3445 value=self.\u sanitize\u列(键,值)
3446 NDFrame.\u设置\u项(自身、键、值)
3447
C:\ProgramData\Anaconda3\lib\site packages\pandas\core\frame.py位于\u sanitize\u列中(self、key、value、broadcast)
3628
3629#把我变成一个废物
->3630值=清理索引(值,self.index,copy=False)
3631如果不存在(值,(np.ndarray,索引)):
3632如果isinstance(值,列表)和len(值)>0:
C:\ProgramData\Anaconda3\lib\site packages\pandas\core\internals\construction.py(数据、索引、副本)
517
518如果len(数据)!=len(索引):
-->519 raise VALUERROR('值的长度与索引的长度不匹配')
520
521如果存在(数据、ABSS)且未复制:
ValueError:值的长度与索引的长度不匹配

谢谢。

我想问题可能出在

df.values.重塑(-1,1)

看看这个例子

df = pd.DataFrame([(.2, .3), (.0, .6), (.6, .0), (.2, .1)], columns=['dogs', 'cats'])

df
   dogs  cats
0   0.2   0.3
1   0.0   0.6
2   0.6   0.0
3   0.2   0.1

df.values.reshape(-1,1)
array([[0.2],
       [0.3],
       [0. ],
       [0.6],
       [0.6],
       [0. ],
       [0.2],
       [0.1]])


因此,您最终为
fit\u predict
提供了一个
shape(n\u samples*n\u feature,1)
向量,并将生成的
shape(n\u samples*n\u feature,)
作为
df的一列插入
shape(n\u samples,n\u feature)
。行数不匹配

那么我做的是错的?所以我要做的是将所有19列合并为1并应用隔离林?所以,要在每一列上单独应用隔离林,我需要将它们分开,并在每一列上逐个应用隔离林?为什么需要合并这些列?Isolationforest将根据输入特征(列)返回每个样本(行)的异常分数。您可以在Just do
df['normal']=iForest.fit_predict(df)
中获得更多信息,因此在使用df['normal']=iForest.fit_predict(df)之后,我得到以下错误,对于行
df=df.drop(df['normal'=-1],inplace=True
),错误是
keyrorr:False
。我应该把它改成
df=df.drop(df['normal'=-1].index,inplace=True
)?没有像
df['normal'=-1]
这样的语法,我会像
df=df[df['normal']!=-1]
df = pd.DataFrame([(.2, .3), (.0, .6), (.6, .0), (.2, .1)], columns=['dogs', 'cats'])

df
   dogs  cats
0   0.2   0.3
1   0.0   0.6
2   0.6   0.0
3   0.2   0.1

df.values.reshape(-1,1)
array([[0.2],
       [0.3],
       [0. ],
       [0.6],
       [0.6],
       [0. ],
       [0.2],
       [0.1]])