即使在Pandas中使用.iloc,索引也会出错

时间:2018-01-20 13:33:19

标签: python pandas dataframe dataset

.writer(cacheWriter)

我在数据集上使用上面的代码,该数据集的列“Class”为0和1。我想要做的很简单,我在数据集中获得Class == 1的索引,我使用它来制作一个子集。

然而,即使索引是从同一数据集中获得的,我在第二行得到错误“位置索引器超出范围”。他们怎么能超出范围?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我认为你只需要boolean indexing

fraud_samples = dataset[dataset.Class == 1]

如果需要指数:

fraud_indices = fraud_samples.index
  

但是我得到错误"位置索引器超出界限"即使索引是从同一数据集中获得的,也在第二行。他们怎么能超出范围?

原因是您的指数不是默认值。因此,根据位置选择DataFrame和函数iloc的长度有一些更高的值,而不是像loc这样的索引名称。

样品:

dataset = pd.DataFrame({'Class':[0,1,0,1]}, index=[0,1,3,5])
print (dataset)
   Class
0      0
1      1
3      0
5      1

fraud_indices = np.array(dataset[dataset.Class == 1].index)
print (fraud_indices)
[1 5]

你不能选择第6行(蟒蛇数从0开始,所以5),因为DataFrame.iloc不存在:

fraud_samples = dataset.iloc[fraud_indices, :]
print (fraud_samples)
  

IndexError:位置索引器超出范围

但是如果按DataFrame.loc选择索引值:

fraud_samples = dataset.loc[fraud_indices, :]
print (fraud_samples)
   Class
1      1
5      1