我想在包含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
的想法是删除以basket
和cricket
开头的所有列,以及在其名称中任意位置包含单词ball
的列。
以上是我到目前为止所做的事情,但不起作用(因为在新数据框中仍包含那些列名)
数据框示例
sports1basketjump | sports
在上面的列名示例中,它将删除列sports1basketjump
,因为它包含单词basket。
此外,使用filter
或/和reduce
函数是否比创建列表和for循环更优化?
答案 0 :(得分:3)
您的列表理解能力没有达到您的期望。除非完全与字符串匹配,否则它将返回一个空列表。有关如何将子字符串列表与字符串列表匹配的答案,请查看matching list of substrings to a list of strings in Python
df.drop(*cols)
将按预期工作。