我尝试运行一个循环,根据条件过滤某些元素并删除匹配的元素,如下所示:
for index, value in enumerate(some_dataset.iloc):
if min(some_dataset.iloc[index]) >= some_dataset.iloc[0].values[index]:
dataset_filtered = some_dataset.drop(index=index)
但是,传递给变量index
中的index参数的值似乎不是整数,相反,我收到了第一个试图删除的值的以下错误:
KeyError:在轴中找不到"[1]"
我认为它是一个Series元素,试图通过在drop()函数的参数中设置index = index.astype(int)
来将其转换为整数,但在本例中,它 * 确实 * 表现为整数,并产生以下错误消息:
属性错误:"int"对象没有属性"astype"
为了解决这个问题,我查看了Anton Protopopov对this question asked by jjjayn的回答,但它对我的情况没有帮助,因为引用了特定的元素而不是迭代索引。
对于上下文,if语句用于过滤掉最小值位于第0个索引的任何样本(因此,其中样本断面的min()
值等于索引0处的值。本质上,它会告诉我,样本中的值只会随着x
(这里是波长)的增加而变大。当我打印一个表格来查看这适用于哪些样本时,结果是我所期望的(100纳米波长是第0指数):
Sample Value (100 nm) Value (minima) Min (λ)
#2 0.0050 0.0050 100
#3 0.0060 0.0060 100
#14 0.0025 0.0025 100
...
因此,打印了这些结果之后,我认为条件不是问题所在。实际上,应该被丢弃的第一个索引也是我希望被丢弃的索引--sample 2(对应于[1])将被传递,但我认为括号也将被传递(至少,这是我的猜测)。因此,总而言之,问题在于传递给index参数的是一个单元素列表/序列[n]
,而不是整数n
,这正是我想要的。
1条答案
按热度按时间wribegjk1#
由于新信息,答案完全重写。查看以前版本的差异。
我复制了你的错误。我最初认为这是与索引错误有关的东西,下面的代码会强制发生。
这段代码将抛出一个
IndexError
,抱怨i
中的值大于当前列数,但您报告的错误KeyError
仅在您尝试以下操作时才会发生:这是因为当您使用index关键字进行删除时,不会基于
iloc
索引器进行删除(即0 ... n
)而是在标准loc
分度器上,其可以是任意顺序并且具有缺失值等。整数15
转换为[15]
的根本原因是,错误打印行会自动将其 Package 到列表中:raise KeyError(f'{ list(labels[mask]) } not found in axis')
.只使用一种形式的索引器。在这个例子中,我将使用
for i, row in df.iterrows()
而不是枚举df.iloc
属性。