即使在 Pandas 中使用 .iloc 也会出现索引越界错误
Posted
技术标签:
【中文标题】即使在 Pandas 中使用 .iloc 也会出现索引越界错误【英文标题】:Index out of bounds error even with .iloc in Pandas 【发布时间】:2018-06-29 14:49:06 【问题描述】:fraud_indices = np.array(dataset[dataset.Class == 1].index)
fraud_samples = dataset.iloc[fraud_indices, :]
我在一个数据集上使用上述代码,该数据集有一列“类”,其中包含 0 和 1。我想做的很简单,我正在获取数据集中 Class == 1 的索引,并且我正在使用它来制作一个子集。
但是,即使索引是从同一数据集获得的,我在第二行也收到错误“位置索引器超出范围”。他们怎么可能越界?有人可以帮忙吗?
【问题讨论】:
dataset.loc[fraud_indices]
呢?
.loc 没有给出错误但不能正常工作。我应该得到 492 行,但使用 .loc 我得到随机更高的行数
嗯,我再次检查您的问题,为什么不使用fraud_samples = dataset[dataset.Class == 1]
?
这样索引的目的是什么?为什么不dataset.loc[dataset.Class == 1, :]
?
【参考方案1】:
我想你只需要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行(python从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
【讨论】:
以上是关于即使在 Pandas 中使用 .iloc 也会出现索引越界错误的主要内容,如果未能解决你的问题,请参考以下文章
快速学会pandas中Dataframe索引.ix,.iloc,.loc的使用以及区别
pandas子集选取的三种方法:[].loc[].iloc[]