2017-06-20 121 views
1

我需要將此循環轉換爲列表理解。這對於通過數據幀循環迭代找到的所有行上爲'TL'列中的條目包括「J」和列'Ink' = 0和刪除整個行:如何將此Python for循環轉換爲列表理解?

for r in df.T: 
    if 'J' in df.loc[r,'TL'] and df.loc[r,'Ink'] == 0: 
     df.drop(r) 
    else: 
     continue 

我已經試過這

df_clean = [ 
    df.drop(r) for r in df.T if 'J' in df.loc[r,'TL'] and df.loc[r,'Ink'] == 0 
] 

我得到一個錯誤,說明

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

+0

你嘗試過什麼嗎?如果沒有,請給它一個鏡頭,如果您需要幫助,請回來。如果你有,給我們看。 – jacoblaw

+0

你確定你想要一個列表理解嗎?即使假設你可以使它工作,看起來你最終會得到一個DataFrame對象列表,在'df.T'中的每個'r'都有一個對象。無論如何,「for」循環有什麼問題? –

+0

我想使用列表理解,因爲我正在使用的數據集非常龐大,並且'for'循環將永遠運行。 –

回答

2

嘗試:

df[~(df.TL.str.contains('J') & df.Ink.eq(0))] 
+0

這似乎工作!我需要仔細檢查數據文件,因爲它的巨大(700,000行),但它看起來不錯。謝謝! –