【问题标题】:How to convert this Python for loop into a list comprehension?如何将此 Python for 循环转换为列表理解?
【发布时间】:2017-11-23 13:35:32
【问题描述】:

我需要将此 for 循环转换为列表理解。此 for 循环遍历数据框以查找列 'TL' 的条目包含“J”和列 'Ink' = 0 的每一行并删除整行:

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:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

【问题讨论】:

  • 你有没有尝试过?如果还没有,请尝试一下,如果需要帮助,请返回。如果有,请告诉我们。
  • 您确定要列表理解吗?即使假设你可以让它工作,看起来你最终会得到一个 DataFrame 对象列表,df.T 中的每个 r 一个。无论如何,for 循环有什么问题?
  • 我想使用列表解析,因为我正在使用的数据集非常庞大,而 for 循环将永远运行。

标签: python loops pandas dataframe


【解决方案1】:

试试:

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

【讨论】:

  • 这似乎行得通!我需要仔细检查数据文件,因为它很大(700,000 行),但看起来不错。谢谢!
猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 2019-03-21
  • 2020-09-13
  • 2020-03-29
相关资源
最近更新 更多