gpt4 book ai didi

python - 列表推导式有效但 for 循环无效——为什么?

转载 作者:太空狗 更新时间:2023-10-30 00:43:34 24 4
gpt4 key购买 nike

我对自己有点恼火,因为我不明白为什么一个问题的解决方案有效而另一个却无效。就像,这表明我对(基本) Pandas 的理解不足,这让我很生气!

无论如何,我的问题很简单:我有一个“坏”值列表(“bad_index”);这些对应于我想删除相应行的数据框('data_clean1')上的行索引。但是,由于每个新数据集的值都会发生变化,我不想将错误的值直接插入代码中。这是我首先做的:

bad_index = [2, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 29]

for i in bad_index:
dataclean2 = dataclean1.drop([i]).reset_index(level = 0, drop = True)

但这没有用; data_clean2 与 data_clean1 完全相同。我的第二个想法是使用列表理解(如下所示);结果很好。

bad_index = [2, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 29]

data_clean2 = data_clean1.drop([x for x in bad_index]).reset_index(level = 0, drop = True)

现在,为什么列表理解方法有效而不是“for”循环?我已经编码几个月了,我觉得我不应该犯这些错误。

谢谢!

最佳答案

data_clean1.drop([x for x in bad_index]).reset_index(level = 0, drop = True) 相当于简单地将 bad_index 列表传递给 删除:

data_clean1.drop(bad_index).reset_index(level = 0, drop = True)

drop 接受一个列表,并删除列表中存在的每个索引。

您的显式 for 循环不起作用,因为在每次迭代中您只是从 dataclean1 数据帧中删除了一个不同的索引而不保存中间数据帧,所以到最后一次迭代dataclean2 只是执行的结果
dataclean2 = dataclean1.drop(29).reset_index(level = 0, drop = True)

关于python - 列表推导式有效但 for 循环无效——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39044403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com