用于删除关键字数据行的Python循环,收入归因列中的收入为零

时间:2013-02-19 04:58:31

标签: python

我使用类似的循环删除重复项并尝试更改它以删除“lastClickRevenue”列中包含值“0”的整个行。

代码执行时没有吐出任何错误,但它不会像我希望的那样删除行。任何帮助将不胜感激。

    for i in range(len(lastClickRevenue)):
        if lastClickRevenue[i] == "0":                        
            currentRevenueKeywords.pop(i)                           
            sessions.pop(i)                                         
            sales.pop(i)                                            
            lastClickRevenue.pop(i)                                 
            firstClickRevenue.pop(i)                                

2 个答案:

答案 0 :(得分:1)

迭代容器并同时修改它总是一个坏主意。

最好用这样的列表理解来编写它:

lastClickRevenue = [x for x in lastClickRevenue if x != 0]

处理其他问题:

currentRevenueKeywords = [x for x,y in zip(currentRevenueKeywords, lastClickRevenue) if y != 0]
sessions = [x for x,y in zip(sessions, lastClickRevenue) if y != 0]
sales = [x for x,y in zip(sales, lastClickRevenue) if y != 0]
firstClickRevenue = [x for x,y in zip(sales, lastClickRevenue) if y != 0]
lastClickRevenue = [x for x in lastClickRevenue if x != 0]

或者你可以通过在一次点击中完成所有操作来使它更加dry

currentRevenueKeywords, sessions, sales, firstClickRevenue, lastClickRevenue = zip(*[(a,b,c,d,x) for (a,b,c,d,x) in zip(currentRevenueKeywords, sessions, sales, firstClickRevenue, lastClickRevenue) if x != 0])

我应该提一下:看起来好像你可以通过某种表格格式或字典存储数据,而不是一堆列表。

答案 1 :(得分:0)

我猜测存储在数组中的值是实际的Numerics而不是string。尝试更改代码以检查数字0而不是字符串“0”。

我还建议查看过滤器功能,仅保留符合特定条件的值。

for i in range(len(lastClickRevenue)):
    if lastClickRevenue[i] == 0:                        
        currentRevenueKeywords.pop(i)                           
        sessions.pop(i)                                         
        sales.pop(i)                                            
        lastClickRevenue.pop(i)                                 
        firstClickRevenue.pop(i)