0

同様のループを使用して重複を削除し、「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)                                
4

2 に答える 2

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]

または、これらすべてを 1 回のヒットで実行して、もう少しドライにすることもできます。

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])

私が言及する必要があるのは、一連のリストではなく、ある種の表形式または辞書でデータを保存することでメリットが得られるように見えることです。

于 2013-02-19T05:07:57.683 に答える
0

配列に格納されている値は、文字列ではなく実際の数値であると推測しています。文字列「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) 
于 2013-02-19T05:02:21.010 に答える