2017-06-20 74 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行),但它看起来不错。谢谢! –