【发布时间】:2016-12-26 22:21:03
【问题描述】:
我对自己有点恼火,因为我不明白为什么一个问题的解决方案有效而另一个无效。如,它表明我对(基本)熊猫的理解不足,这让我很生气!
无论如何,我的问题很简单:我有一个“坏”值列表(“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”循环?我已经编码了几个月,我觉得我不应该犯这些错误。
谢谢!
【问题讨论】:
-
我不确定
drop做了什么,但我知道在for loop中,您在每次迭代期间都会重新分配dataclean2。 -
你的意思是列表理解而不是正则表达式?就是否犯错误而言,我已经编码多年,仍然遇到我不理解的问题,并且犯了我觉得我不应该犯的错误!我希望我能告诉你,错误会随着时间的推移而消失......
-
是的,为清楚起见进行了编辑!
标签: python pandas for-loop indexing list-comprehension