【问题标题】:PySpark drop columns based on column names / String conditionPySpark 基于列名/字符串条件删除列
【发布时间】:2018-12-24 03:44:27
【问题描述】:

我想删除包含 banned_columns 列表中任何单词的 pyspark 数据框中的列,并从剩余的列中形成一个新的数据框

banned_columns = ["basket","cricket","ball"]
drop_these = [columns_to_drop for columns_to_drop in df.columns if columns_to_drop in banned_columns]

df_new = df.drop(*drop_these)

banned_columns 的想法是删除以basketcricket 开头的所有列,以及名称中任何位置包含单词ball 的列。

以上是我到目前为止所做的,但它不起作用(因为在新数据框中仍然包含那些列名称)

数据框示例

 sports1basketjump | sports

在上面的列名示例中,它将删除列sports1basketjump,因为它包含单词 basket。

此外,使用filter 或/和reduce 函数是否比创建列表和for 循环增加了优化?

【问题讨论】:

  • df.drop(drop_these,axis=1)
  • @Wen Hi Wen!我认为 pyspark 中不存在该轴?还是?

标签: python apache-spark pyspark


【解决方案1】:

您的列表理解并没有达到您的预期。它将返回一个空列表,除非它完全匹配一个字符串。有关如何将子字符串列表与字符串列表匹配的答案,请查看matching list of substrings to a list of strings in Python

df.drop(*cols) 将按您的预期工作。

【讨论】:

  • 由于这个答案对某些人有帮助,我宁愿链接这个问题。
  • 好点子,请随意调整问题:) 所以答案更相关
  • 可以,请您链接您的新 q/a,以便我可以链接它?
猜你喜欢
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 2022-01-20
  • 2022-10-24
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2019-07-18
相关资源
最近更新 更多